Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作。
unittest是python的标准测试库,相比于其他测试框架是python目前使用最广的测试框架。
unittest有四个比较重要的概念是test fixture, test case, test suite, test runner, 。
在说unittest之前,先说几个概念:
TestCase 也就是测试用例
TestSuite 多个测试用例集合在一起,就是TestSuite
TestLoader是用来加载TestCase到TestSuite中的
TestRunner是来执行测试用例的,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息
通过dir(unittest),我们可以看到unittest全部的属性和方法,他们的关系如下图所示。
unittest主要类关系
正常调用unittest的流程是,TestLoader 自动将测试用例TestCase中加载到TestSuite里,TextTestRunner调用TestSuite的run方法,顺序执行里面的TestCase中以test开头的方法,并得到测试结果TestResult。在执行TestCase过程中,先进行SetUp()环境准备,执行测试代码,最后tearDown()进行测试的还原。
其中TestLoader在加载过程中,进行添加的TestCase是没有顺序的。一个TestCase里如果存在多个验证方法的话,会按照方法中test后方首字母的ascii码从小到大排序后执行。
可以通过手动调用TestSuite的addTest、addTests方法来动态添加TestCase,这样既可以确定添加用例的执行顺序,也可避免TestCase中的验证方法一定要用test开头。
下面写一个简单的单元测试用例
import unittest class MyTest(unittest.TestCase): # 继承unittest.TestCase def tearDown(self): # 每个测试用例执行之后做操作 print('111') def setUp(self): # 每个测试用例执行之前做操作 print('22222') @classmethod def tearDownClass(self): # 必须使用 @ classmethod装饰器, 所有test运行完后运行一次 print('4444444') @classmethod def setUpClass(self): # 必须使用@classmethod 装饰器,所有test运行前运行一次 print('33333') def test_a_run(self): self.assertEqual(1, 1) # 测试用例 def test_b_run(self): self.assertEqual(2, 2) # 测试用例 if __name__ == '__main__': unittest.main()#运行所有的测试用例
下面是一些常用的断言,也就是校验结果
assertEqual(a, b) a == b assertNotEqual(a, b) a != b assertTrue(x) bool(x) is True assertFalse(x) bool(x) is False assertIsNone(x) x is None assertIsNotNone(x) x is not None assertIn(a, b) a in b assertNotIn(a, b) a not in b
那如何生成一个测试报告呢,需要加入另外一个模块了,HTMLTestRunner,这个模块需要自己安装,使用执行测试用例就会生成一个html的测试报告,里面会有每个测试用例的执行结果,代码如下:
import HTMLTestRunner import unittest class MyTest(unittest.TestCase):#继承unittest.TestCase def tearDown(self): #每个测试用例执行之后做操作 print('111') def setUp(self): #每个测试用例执行之前做操作 print(22222) def test_run(self): # self.assertEqual(1,1) self.assertIs(1,1) #测试用例 def test_run2(self): # self.assertEqual(1,1) self.assertIs(1,1) #测试用例 def test_run3(self): # self.assertEqual(1,1) self.assertIs(1,1) #测试用例 def test_run1(self): # self.assertEqual(1,1) self.assertIs(1,1) #测试用例 if __name__ == '__main__': test_suite = unittest.TestSuite()#创建一个测试集合 test_suite.addTest(MyTest('test_run1'))#测试套件中添加测试用例 #test_suite.addTest(unittest.makeSuite(MyTest))#使用makeSuite方法添加所有的测试方法 fp = open('res.html','wb')#打开一个保存结果的html文件 runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title='api测试报告',description='测试情况') #生成执行用例的对象 runner.run(test_suite) #执行测试套件
如果我们有很多个模块,每个模块下面都写了很多python文件,每个python文件里面都有测试用例,那怎么把这个目录下的用例都执行了呢,就要先找到这个目录下的所有python文件,然后找到里面的测试用例,逐个执行,代码如下:
import unittest,HTMLTestRunner suite = unittest.TestSuite()#创建测试套件 all_cases = unittest.defaultTestLoader.discover('.','test_*.py') #找到某个目录下所有的以test开头的Python文件里面的测试用例 for case in all_cases: suite.addTests(case)#把所有的测试用例添加进来 fp = open('res.html','wb') runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title='all_tests',description='所有测试情况') runner.run(suite) #运行测试
我们在后续进行持续集成的时候,要让代码自动运行,就会用到Jenkins了,但是上面产生的测试报告都是html格式的,Jenkins不认识,就在Jenkins里面显示不出来。那咱们就要产生一些Jenkins认识的测试报告,Jenkins认识xml格式的报告,那咱们就产生xml格式的呗,就需要用一个新的模块,xmlrunner,安装直接 pip install xmlrunner即可,代码如下:
import unittest import xmlrunner #导入这个模块 class My(unittest.TestCase): def test1(self,a,b,c): self.assertEqual(a+b,c) if __name__=='__main__': test_suite = unittest.TestSuite() test_suite.addTest(unittest.makeSuite(My)) runner = xmlrunner.XMLTestRunner(output='report')#指定报告放的目录 runner.run(test_suite)
然后咱们运行,可以看到在report目录下已经产生了xml格式的报告了,而且还自动把日期加上了
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]