Python之单元测试unittest

时光毁灭记忆、已成空白 提交于 2019-12-05 03:16:35

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测试报告')

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

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!