• Python之单元测试unittest


    Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,使用时需import导入。

    首先了解几个概念:

    TestCase表示测试用例

    TestSuite 表示用例集合

    TestRunner 运行测试用例

    TestLoader 查找测试用例

    写一个单元测试的用例:

    import unittest
    
    def add(a,b):
        return a+b
    
    class AddTest(unittest.TestCase):
    
        # @classmethod
        # def setUpClass(cls): #所有用例执行之前都会执行它
        #     print('setUpClass')
        #
        # @classmethod
        # def tearDownClass(cls): ##所有用例执行之后都会执行它
        #     print('tearDownClass')
        #
        # def setUp(self): #每条用例执行之前都会执行setUp
        #     print('setUp')
        #
        # def tearDown(self): #每条用例执行之后都会执行tearDown
        #     print('tearDown')
    
        def test_normal(self): #在unittest里函数名需要以test开头,否则不会被认为是测试用例
            result=add(1,1)
            self.assertEqual(2,result)
            print('test_normal')
        def test_error(self): #用例执行的运行顺序是根据函数名的英文顺序来的
            result=add(1,1)
            self.assertEqual(1,result,'结果计算错误') #第三个参数代表提示信息,表示如果这条用例运行失败的提示信息是什么
            print('test_error')
    
    unittest.main() #执行测试用例

    用例写完后如何生成测试报告呢?

    生成测试报告需要用到HTMLTestRunner模块,这个模块需要自己安装,把它放在python安装目录即可,使用时import即可。

    HTMLTestRunner产生的测试报告比较简单,还有一个BeautifulReport模块,可以产生比较美观的测试报告,BeautifulReport也需要自己安装,放在python安装目录即可。

    生成一个html的测试报告,里面会有每个测试用例的执行结果,两种生成测试报告代码如下:

    import unittest
    import HTMLTestRunner
    import BeautifulReport as bfr
    
    def add(a,b):
        return a+b
    
    class AddTest(unittest.TestCase):
    
        def test_normal(self): #在unittest里函数名需要以test开头,否则不会被认为是测试用例
            result=add(1,1)
            self.assertEqual(2,result)
            print('test_normal')
        def test_error(self): #用例执行的运行顺序是根据函数名的英文顺序来的
            result=add(1,1)
            self.assertEqual(1,result,'结果计算错误') #第三个参数代表提示信息,表示如果这条用例运行失败的提示信息是什么
            print('test_error')
    
    # unittest.main() #执行测试用例
    
    #产生测试报告(产生测试报告时需把unittest.main()注释掉,否则不会产生报告)
    
    #BeautifulReport产生测试报告
    test_suite=unittest.makeSuite(AddTest)
    report=bfr.BeautifulReport(test_suite)
    report.report(filename='br_report.html',description='bf测试报告') #默认在当前目录下,如果想指定目录加参数log_path=''即可
    print(report.failure_count) #统计用例执行失败的次数
    print(report.success_count) #统计用例执行成功的次数 #HTMLTestRunner产生测试报告 # file=open('report.html','wb') #打开一个文件保存测试结果 # runner=HTMLTestRunner.HTMLTestRunner(file,title='测试报告') #生成执行用例的对象 # test_suite=unittest.makeSuite(AddTest) #使用makeSuite方法添加所有的测试方法 # runner.run(test_suite) #执行测试套件 # file.close()

    如果说一个文件夹下有很多个测试用例,那要怎么操作执行测试用例呢?这就需要用到TestLoader

    import unittest,BeautifulReport
    
    #很多测试用例在同一个文件夹下
    # test_suite=unittest.defaultTestLoader.discover('cases','*.py') #第一个参数是传一个文件夹,第二个参数是匹配规则
    # bf=BeautifulReport.BeautifulReport(test_suite)
    # bf.report('report2.html','case测试报告')

     如果是多层级的目录,应该怎么查找测试用例?

  • 相关阅读:
    一道面试题引发的对JavaScript类型转换的思考
    微信后台开发第一步:nodeJS+express接入微信后台详细教程
    class命名
    了解真实的『REM』手机屏幕适配
    js刷新框架子页面的七种方法代码
    移动前端开发之viewport的深入理解
    移动web点5像素的秘密
    refactor window_x64微信小程序环境搭建
    JSON API免费接口
    webpack
  • 原文地址:https://www.cnblogs.com/tata-learning/p/11902048.html
Copyright © 2020-2023  润新知