• Python模块unittest


    Python自带一个单元测试框架,unittest模块,用它来做单元测试,它里面封装好了一些校验返回结果的方法和一些用例执行前的初始化操作

    在说unittest之前,先说几个概念:

    TestCase:测试用例

    TestSuite:多个测试用例集合在一起

    TestLoader:用来加载TestCase到TestSuite

    TestRunner:执行测试用例,测试的结果保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息

    import unittest
    
    class MyTest(unittest.TestCase):  # 继承unittest.TestCase
        def tearDown(self):
            # 每个测试用例执行之后做操作
            print('111')
    
        def setUp(self):
            # 每个测试用例执行之前做操作
            print('22222')
    
        @classmethod
        def tearDownClass(self):
        # 必须使用 @ classmethod装饰器, 所有test运行完后运行一次
             print('4444444')
        @classmethod
        def setUpClass(self):
        # 必须使用@classmethod 装饰器,所有test运行前运行一次
            print('33333')
    
        def test_a_run(self):
            self.assertEqual(1, 1)  # 测试用例
            
        def test_b_run(self):
            self.assertEqual(2, 2)  # 测试用例
            
    if __name__ == '__main__':
        unittest.main()#运行所有的测试用例
    

     下面是一些常用的断言,也就是校验结果

            assertEqual(a, b)     a == b      
            assertNotEqual(a, b)     a != b      
            assertTrue(x)     bool(x) is True      
            assertFalse(x)     bool(x) is False      
            assertIsNone(x)     x is None     
            assertIsNotNone(x)     x is not None   
            assertIn(a, b)     a in b    
            assertNotIn(a, b)     a not in b    
    

    HTMLTestRunner模块,可以生成测试报告,这个模块需要自己安装,使用执行测试用例就会生成一个HTML的测试报告,里面会有每个测试用例的执行结果,

    import HTMLTestRunner        
            import unittest
            class MyTest(unittest.TestCase):#继承unittest.TestCase
                def tearDown(self):
                    #每个测试用例执行之后做操作
                    print('111')
                def setUp(self):
                    #每个测试用例执行之前做操作
                    print(22222)
                def test_run(self):
                    # self.assertEqual(1,1)
                    self.assertIs(1,1)
                    #测试用例
                def test_run2(self):
                    # self.assertEqual(1,1)
                    self.assertIs(1,1)
                    #测试用例
                def test_run3(self):
                    # self.assertEqual(1,1)
                    self.assertIs(1,1)
                    #测试用例
                def test_run1(self):
                    # self.assertEqual(1,1)
                    self.assertIs(1,1)
                    #测试用例
            if __name__ == '__main__':
                test_suite = unittest.TestSuite()#创建一个测试集合
                test_suite.addTest(MyTest('test_run1'))#测试套件中添加测试用例
                #test_suite.addTest(unittest.makeSuite(MyTest))#使用makeSuite方法添加所有的测试方法
                fp = open('res.html','wb')#打开一个保存结果的html文件
                runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title='api测试报告',description='测试情况')
                #生成执行用例的对象
                runner.run(test_suite)
                #执行测试套件
    

      如果我们有多个模块,每个模块下都写了很多Python文件,每个Python文件里面都有测试用例,那怎么把这个目录下的用例都执行呢,就是要先找到这个目录下的所有Python文件,然后找到里面的测试用例,逐个执行

    import unittest,HTMLTestRunner
            suite = unittest.TestSuite()#创建测试套件
            all_cases = unittest.defaultTestLoader.discover('.','test_*.py')
            #找到某个目录下所有的以test开头的Python文件里面的测试用例
            for case in all_cases:
                suite.addTests(case)#把所有的测试用例添加进来
            fp = open('res.html','wb')
            runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title='all_tests',description='所有测试情况')
            runner.run(suite)
            #运行测试
    

      我们在后续进行持续集成的时候,要让代码自动运行,就会用到Jenkins了,但是上面产生的测试报告都是HTML格式的,Jenkins不认识,就在Jenkins里面显示不出来。那就要生成Jenkins认识的测试报告,Jenkins认识XML格式的报告,那就产生XML格式的报告,这就需要新的模块,xmlrunner,安装直接pip install xmlrunner

    import unittest
    import xmlrunner
    #导入这个模块
    class My(unittest.TestCase):
     
        def test1(self,a,b,c):
            self.assertEqual(a+b,c)
     
    if __name__=='__main__':
        test_suite = unittest.TestSuite()
        test_suite.addTest(unittest.makeSuite(My))
        runner = xmlrunner.XMLTestRunner(output='report')#指定报告放的目录
        runner.run(test_suite)
    

      运行之后,就会在report目录生成XML格式的测试报告了,还自动添加了日期

     转载

  • 相关阅读:
    设计模式(3)——模版方法模式
    设计模式(2)——工厂模式
    设计模式(1)——单例模式
    哪些SQL语句不能用在事务中
    Max Degree of Parallelism最大并行度配置--缓解CPU压力
    IOC框架--AutoFac
    Log4Net日志详解
    Trace、Debug和TraceSource的使用以及日志设计
    c# System.Diagnostics命名空间--调试并跟踪代码日志
    数据分析必会的六大实用模型
  • 原文地址:https://www.cnblogs.com/yyf573462811/p/9593679.html
Copyright © 2020-2023  润新知