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)