今天来说说单元测试框架 - unittest。
一、unittest的使用
def calc(a,b): return round(a/b) #保留一个小数 class TestCalc(unittest.TestCase):#继承unittest def setUp(self): print('啥时候运行的, setUp') #每个用例运行之前运行的 def tearDown(self): print('啥时候运行的,tearDown') #每个用例运行之后运行的 @classmethod def setUpClass(cls): print('啥时候运行的,setUpClass') # 所有的用例执行之前会执行 @classmethod def tearDownClass(cls): print('啥时候运行的,tearDownClass') # 所有的用例执行之后会执行 def test_calc(self): #要以test开头,否则不会执行 '''测试1''' #用例描述,使用HTMLRunner报告时,会作为用例描述,这个是静态,如果要使用动态的,这个方式不行 # # res = calc(1,2) # self.assertEqual(0.5, res, '计算不正确') print('test_calc') self.assertEqual(1, 1) def test_calc_zero(self): '''测试2''' # res = calc(1, 0) # self.assertIsNone(res, 'zero') print('test_calc_zero') self.assertEqual(1, 2) def testa(self): print('testa') self.assertEqual(1,1) def testb(self): print('testa') self.assertEqual(1,2)
二、执行所有测试用例,unittest.main
1、执行所有测试用例
# unittest.main() #会运行当前python文件里面的所有测试用例,但不会产生测试报告 #会将测试用例里的print打印出来,用于调试
2、用例的执行顺序
如一中在每个测试用例,使用print()进行调用,使用uniitest.main进行调试,必现用例执行的顺序是按用例名称的标题的字母进行排序执行的。
三、执行能打印出报告
1、下载HTMLTestRunner, 放到pyhon安装目录的lib目录下
如我的本地python3安装目录为:C:python3Lib,将文件放到目录下,在使用的测试文件里,导入就能使用。
2、使用HTMLTestRunner生成测试html测试报告
#生成报告 #测试套件,用例集 #存放测试用例的 #1、先把所有的测试用例都存放到用例集 #2、运行这些测试用例 #3、产生测试报告 #运行顺序,以字母的顺序开头运行的 suite = unittest.TestSuite() #测试集合 suite.addTest(unittest.makeSuite(TestCalc)) #用例集合变成测试集合,把赐才写的用例加进来 f = open('test.html', 'wb') #wb打开是全是二进制的,中文不会报错,没有字符解码的问题 runner = HTMLTestRunner.HTMLTestRunner(f, title='双鱼座有例标题',description='用例描述') runner.run(suite) #运行用例
如果在pycharm里面,不要右键->执行,从菜单Run->Run...,选择文件,否则pycharm是不会生成报告的。
四、生成报告不使用HTMLTestRunner, 太简单了,使用好看的测试报告模块
BeautifulReport,这个需要另外安装,不能使用pip安装,并没有在托管仓库里,下载源码文件,安装。
import unittest import HTMLTestRunner from BeautifulReport import BeautifulReport as bf #导入包
#使用BeautifulReport生成报告 suite1 = unittest.TestSuite()#测试集合 suite1.addTest(unittest.makeSuite(TestCalc)) report = bf(suite1) report.report(description='描述必须写',filename='test') #在本前目录下生成test.html的测试报告