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测试报告')
如果是多层级的目录,应该怎么查找测试用例?