• 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(),也可以执行
  • 相关阅读:
    html中的浮动
    Html中元素的分类
    前端标签命名规范
    meta详解
    CSS的嵌套方法
    html标签
    W3C标准
    AE待整理
    AE小知识点备忘录
    Maximum Subarray
  • 原文地址:https://www.cnblogs.com/hujc/p/11273361.html
Copyright © 2020-2023  润新知