unittest测试框架基本操作


1、

setUp:每个测试方法执行前执行一次
tearDown:每个测试方法结束后执行一次
setUpClass:整个测试执行前执行一次
tearDownClass:整个测试执行后执行一次

2、
以python自带的unittest框架来运行测试类:右键->Run 'Python tests for uni....'
以普通py文件运行:Select Run/Debug Configuration->edit Configurations->Add New Configuration->选择Script path->apply->ok

3、断言
assertIn
assertNotIn
assertEqual
assertNotEqual
assertTrue
assertFalse

4、自动化用例管理TestLoader的用法
  • loadTestsFromTestCase

先写待调用文件:
stringtests.py
 1 import unittest
 2 
 3 
 4 class StringTests(unittest.TestCase):
 5 
 6     def testStr1(self):
 7         self.assertIn('hello', 'hello world')
 8 
 9     def testStr2(self):
10         self.assertNotIn('hello', 'taibao')
numbertests.py
 1 import unittest
 2 
 3 
 4 class NumberTests(unittest.TestCase):
 5 
 6     def testAdd(self):
 7         self.assertEqual(1, 1)
 8 
 9     def testSum(self):
10         self.assertNotEqual(1, 2)

   

  调用文件:

ut1.py
 1 import unittest
 2 
 3 from numbertests import NumberTests
 4 from stringtests import StringTests
 5 
 6 
 7 if __name__ == '__main__':
 8     st = unittest.defaultTestLoader.loadTestsFromTestCase(StringTests)
 9     ut = unittest.defaultTestLoader.loadTestsFromTestCase(NumberTests)
10     suite = unittest.TestSuite([st, ut])
11     unittest.TextTestRunner().run(suite)

结果:

1 ....
2 ----------------------------------------------------------------------
3 Ran 4 tests in 0.001s
4 
5 OK
6 
7 Process finished with exit code 0

其中第一行四个点代表四个用例全部通过,若不通过则为F。

  • loadTestsFromModule

调用文件:

 1 import unittest
 2 import numbertests
 3 import stringtests
 4 
 5 
 6 if __name__ == '__main__':
 7     names = [numbertests, stringtests]
 8     modules = []
 9 
10     for item in names:
11         module = unittest.defaultTestLoader.loadTestsFromModule(item)
12         modules.append(module)
13 
14     suite = unittest.TestSuite(modules)
15     unittest.TextTestRunner().run(suite)
  • loadTestsFromNames

调用文件:

1 import unittest
2 
3 
4 if __name__ == '__main__':
5     names = ['numbertests.NumberTests.testSum', 'stringtests.StringTests.testStr1']
6     smoke_test = unittest.defaultTestLoader.loadTestsFromNames(names)
7     suite = unittest.TestSuite([smoke_test])
8     unittest.TextTestRunner().run(suite)
  • loadTestsFromNames优化

调用文件:

 1 import unittest
 2 from stringtests import StringTests
 3 
 4 
 5 # 定义一个获取全名称的函数
 6 def getFullTestCaseName(names):
 7     full_name = []
 8     for item in names:
 9         full_name.append('stringtests.StringTests.' + item)
10     return full_name
11 
12 
13 if __name__ == '__main__':
14     names = unittest.defaultTestLoader.getTestCaseNames(StringTests)
15     print(names)
16     smoke_test = unittest.defaultTestLoader.loadTestsFromNames(getFullTestCaseName(names))
17     suite = unittest.TestSuite([smoke_test])
18     unittest.TextTestRunner().run(suite)