#unittest单元测试框架,主要由四部分组成:测试固件、测试用例、测试套件、测试执行器
#1、测试固件:
'''def setUp(self): # 每条用例执行前都要执行,例如测试前的准备工作
print('setup')
def tearDown(self): # 每条用例执行后都要执行,例如测试执行完成后的清除配置工作
print('tearDown')
'''
#例如:
1 import unittest 2 3 def calc(a,b): 4 return a+b 5 6 class CalcTest(unittest.TestCase): 7 def setUp(self):#每条用例执行前都要执行 8 print('setup') 9 10 def tearDown(self):#每条用例执行后都要执行 11 print('tearDown') 12 13 def test_pass(self): 14 print('aaaa') 15 result = calc(1,2) 16 self.assertEqual(3,result) 17 18 def test_fail(self): 19 print('bbbb') 20 result = calc(1,0) 21 self.assertEqual(2,result,'什么时候出msg') 22 23 def test_a(self): 24 print('cccc') 25 unittest.main()
》执行结果:
setup
cccc
tearDown
setup
bbbb
tearDown
setup
aaaa
tearDown
'''
很多时候我们只想执行一次测试固件:比如setUp()中放着连接数据库操作,
多个test case放着不同数据库操作,然后tearDown()断开数据连接,
使用setUpClass()和tearDownClass()可以的得到这样的效果
@classmethod
def setUpClass(cls):
print('setupClass')
@classmethod
def tearDownClass(cls):
print('teardownClass')
'''
1 import unittest 2 3 def calc(a,b): 4 return a+b 5 6 class CalcTest(unittest.TestCase): 7 @classmethod 8 def setUpClass(cls): 9 print('setupClass') 10 11 @classmethod 12 def tearDownClass(cls): 13 print('teardownClass') 14 15 def test_pass(self): 16 print('aaaa') 17 # result = calc(1,2) 18 # self.assertEqual(3,result) 19 20 def test_fail(self): 21 print('bbbb') 22 # result = calc(1,0) 23 # self.assertEqual(2,result,'什么时候出msg') 24 25 def test_a(self): 26 print('cccc') 27 unittest.main()
执行结果:
》
setupClass
cccc
bbbb
aaaa
teardownClass
1 #测试用例 2 #测试用例中,包含测试固件,测试固件可以不写,但是至少要有一个以test开头的函数。 3 #unittest会自动识别test开头的函数是测试代码,一定要用小写的test开头! 4 #测试用例执行顺序是以test后面的字母顺序执行的。例如下面的例子执行顺序是test_a,test_fail,test_pas
#测试执行器 test runner用来执行加载的测试用例,可以是单个测试用例,也可以是测试套件 一种就是上方实例中的直接使用unittest.main()去执行,会搜索所有以test开头的测试用例,按照ASCII的顺序执行多个用例 另一种就是使用TextTestRunner()方法初始化一个测试执行器,然后使用run()去执行测试套件
1 suite = unittest.TestSuite(unittest.makeSuite(CalcTest)) 2 runner = unittest.TextTestRunner() 3 runner.run(suite)
4 这里suite是指测试套件的实例
使用makeSuite()可以把一个类下面所有测试方法都加载到测试套件中
#测试套件
很多测试用例的集合就是测试套件,通过测试套件来管理多个测试用例,会根据用例的加载顺序执行用例
使用TestSuite()初始化一个Suite实例
使用addTest()方法加载测试方法到测试套件中,addTest()如果要在传入别的包下的测试方法: 包名.类名(测试方法函数)
1 suite = unittest.TestSuite() 2 suite.addTest(CalcTest('test_fail')) 3 suite.addTest(CalcTest('test_a')) 4 runner = unittest.TextTestRunner() 5 runner.run(suite)
1 将以上代码替换unittest.main(),也可以执行