python3+unittest单元测试框架

#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(),也可以执行

猜你喜欢

转载自www.cnblogs.com/hujc/p/11273361.html