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