zoukankan      html  css  js  c++  java
  • 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(),也可以执行
  • 相关阅读:
    Time Zone 【模拟时区转换】(HDU暑假2018多校第一场)
    HDU 1281 棋盘游戏 【二分图最大匹配】
    Codeforces Round #527 (Div. 3) F. Tree with Maximum Cost 【DFS换根 || 树形dp】
    Codeforces Round #527 (Div. 3) D2. Great Vova Wall (Version 2) 【思维】
    Codeforces Round #527 (Div. 3) D1. Great Vova Wall (Version 1) 【思维】
    Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) C. Connect Three 【模拟】
    Avito Cool Challenge 2018 E. Missing Numbers 【枚举】
    Avito Cool Challenge 2018 C. Colorful Bricks 【排列组合】
    005 如何分析问题框架
    004 如何定义和澄清问题
  • 原文地址:https://www.cnblogs.com/hujc/p/11273361.html
Copyright © 2011-2022 走看看