• Python-单元测试unittest


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

    • TestCase 也就是测试用例
    • TestSuite 多个测试用例集合在一起,就是TestSuite
    • TestLoader是用来加载TestCase到TestSuite中的
    • TestRunner是来执行测试用例的,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等
    import unittest
    class MyTest(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
            print('什么时候运行我呢,我是setUpClass')
            #这个类下面所有用例运行之前先运行的
    
        @classmethod
        def tearDownClass(cls):
            print('什么时候运行我呢,我是tearDownClass')
            #这个类下面所有用例运行完之后运行的
    
        def setUp(self):
            print('每个用例运行之前都会先运行我')
        def tearDown(self):
            print('每个用例运行之后都会再运行我')
        def test_ggy(self):
            self.assertEqual(1,1)
            print('第一条')
        def test_zyl(self):
            print('第二条用例')
            self.assertEqual(1,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

    三,生成html格式报告,需要安装另一个模块:pip install HTMLTestRunner

    import unittest
    import HTMLTestRunner
    class My(unittest.TestCase):#继承unittest.TestCase
        def testa(self):
            '''测试哈哈'''
            self.assertEqual(1,1)
    
        def test_gy(self):
            self.assertEqual('a','a')
    
    if __name__=='__main__':
        suite=unittest.TestSuite()#创建一个空的测试集合
        suite.addTest(My('testa'))#添加某个测试用例到集合中
        suite.addTest(My('test_gy'))
        fw=open('test_new.html','wb')#打开一个保存结果的html文件
        runner=HTMLTestRunner.HTMLTestRunner(stream=fw,title='niuniuTEST',description='这里是描述信息')#生成执行用例的对象
        runner.run(suite)#运行测试套件

    四,生成xml格式报告,实际工作中会跟jenkins做持续集成,需要生成xml格式报告,才能在jenkins中查看,又需要安装另一个新的模块了:pip install xmlrunner

    import unittest
    import xmlrunner
    class My(unittest.TestCase):
        def testa(self):
            '''测试哈哈'''
            self.assertEqual(1,1)
        def test_gy(self):
            self.assertEqual('a','a')
    
    class My2(unittest.TestCase):
        def testb(self):
            self.assertEqual(1,1)
        def test2(self):
            '''TEST测试未通过'''
            self.assertEqual(1,2)
    if __name__=='__main__':
        suite=unittest.TestSuite()
        suite.addTest(unittest.makeSuite(My))#使用makeSuite方法添加所有的测试用例到套件中
        suite.addTest(unittest.makeSuite(My2))
        runner2=xmlrunner.XMLTestRunner(output='report')#指定报告存放的目录为report
        runner2.run(suite)

    生成测试报告存在在report下,每一个类,生成一个报告,并且自动加上了时间戳

    五,实际工作中,会有多个模块,为了分类测试每个模块,会写多个python文件,每个文件中包含多个测试用例,那么怎么把这个目录下所有用例都执行了呢,找到目录下所有python文件,然后再找里面的测试case,逐一执行

    import HTMLTestRunner
    import unittest
    
    suite=unittest.TestSuite()#定义测试集合
    all_case=unittest.defaultTestLoader.discover(
        r'D:
    iuniu2018_codingday11AUTOcase','p*.py')#找到case下所有.py文件
    for case in all_case:
        print('case...',case)
        suite.addTest(case)
    fw=open('report.html','wb')
    runner=HTMLTestRunner.HTMLTestRunner(stream=fw,title='多个文件运行')
    runner.run(suite)

  • 相关阅读:
    Python之路_Day6
    正则表达式
    tensorflow 使用 5 mnist 数据集, softmax 函数
    数据分析 大数据之路 六 matplotlib 绘图工具
    tensorflow 使用 4 非线性回归
    tensorflow 使用 3 模型学习
    数据分析 大数据之路 五 pandas 报表
    tensorflow 使用 2 Felch ,Feed
    tensorflow 使用 1 常量,变量
    数据分析 大数据之路 四 numpy 2
  • 原文地址:https://www.cnblogs.com/niuniu2018/p/8081549.html
Copyright © 2020-2023  润新知