python标准库系列教程(五)——unittest单元测试(下篇)
python进阶教程
机器学习
深度学习
长按二维码关注
进入正文
python标准库系列教程(五)——unittest库单元测试(下篇)
声明:前面的python标准库系列文章详细讲解了Python的三大函数式编程库以及集合库,itertools、functools、operators库以及collections库,本文继续python标准库系列文章,本文为第五篇,深入详解python的单元测试原理以及unittest的基本架构,鉴于篇幅较长,第五篇将分为几个小的篇章说明,本文为下篇,后续还会有系列文章更新,希望对小伙伴有所帮助!
通过系列文章的上篇、中篇已经详细讲解了TestCase、TestLoader、TestSuite、TextTestRunner、TextTestResult这些基本架构的使用方法,这篇文章将详细介绍python其他的一些单元测试框架,主要是简要介绍一下HTMLTestRunner的使用。
目录
一 HTMLTestRunner
1.1 简单介绍
1.2 简单安装
1.3 简单实例
1.4 运行结果
二 其他单元测试工具
01
HTMLTestRunner
简单介绍
遗憾的是:HTMLTestRunner目前是只支持python2.x版本,所以本文的所有代码均是针对python2.7版本的。
简单安装
首先需要下载HTMLTestRunner.py,下载地址:
http://tungwaiyip.info/software/HTMLTestRunner.html
它其实就是一个很小的.py文件,自己下载即可,不支持pip安装。然后
简单实例
def add(a, b):
return a+b
def minus(a, b):
return a-b
def multi(a, b):
return a*b
def divide(a, b):
return a/b
然后定义一个测试模块,其实HTMLTestRunner模块是对原生的unittest里面的TextTestRunner的改进,所以单元测试的步骤基本上是一样的,定义一个test.py文件,代码如下:
#_*_ coding:utf-8 _*_
from functions import *
import unittest
from HTMLTestRunner import HTMLTestRunner
import sys
class TestFunctions(unittest.TestCase):
def test_add(self): #测试加法的方法
self.assertEqual(3, add(1, 2))
self.assertNotEqual(3, add(2, 2))
def test_minus(self): #测试减法的方法
self.assertEqual(1, minus(3, 2))
def test_multi(self): #测试乘法的方法
self.assertEqual(6, multi(2, 3))
def test_divide(self): #测试除法的方法
self.assertEqual(2, divide(6, 3))
self.assertEqual(2.5, divide(5, 2))
if __name__ == '__main__':
#第一步:构建suite对象
suite = unittest.TestSuite()
#第二步:将需要测试的Case添加到suite里面,也可以使用TestLoader进行加载
tests = [TestFunctions("test_add"), TestFunctions("test_minus"), TestFunctions("test_divide"),TestFunctions('test_multi')]
suite.addTests(tests)
#第三步:创建runner,并且为runner制定需要写入的stream
with open('HTMLReport.html', 'wb') as f:
runner = HTMLTestRunner(stream=f, title = 'MathFunc Test Report', description='generated by HTMLTestRunner.',verbosity=2)
runner.run(suite)
注意:
上面的使用步骤仅仅是构建runner的不同,一个是使用TextTestRunner,一个是使用HTMLTestRunner.
上面的代码运行环境为python2.7
运行结果
它其实就是一个很小的.py文件,自己下载即可,不支持pip安装。然后
并放到当前目录下,这是针对某一个项目的;如果想要一劳永逸,也可以把它放在python目录下的Lib中,这样所有的跑一趟宏代码都可以使用了,就可以导入运行了。
ok test_add (__main__.TestFunctions)
ok test_minus (__main__.TestFunctions)
F test_divide (__main__.TestFunctions)
ok test_multi (__main__.TestFunctions)
Time Elapsed: 0:00:00.008000
即三个测试成功,一个失败了,然后我们可以打开所保存的HTMLReport.html文件,我们得到如下的结果,
这是因为在python2中,除法/表示取整,%表示取余;
在python3中除法/表示真除法,而//表示取整,%表示取余。故而在python3中是通过的,在Python2中是不通过的。
总结:上面的网页展示相比较于单纯的文本表示,是不是美观方便很多?02
其他单元测试工具
testtools 是一个功能类似 unittest 的库,它集合众家标准测试库之所长,和 unittest 相比,功能更为强大,使用更为简单,OpenStack 广泛的利用它编写单元测试。由于在用法上 testtools 和 unittest 类似,所以本节简要介绍 testtols 的特点:
(1)Better assertion methods: 支持 assertIn, assertIs, assertIsInstance 等 assertion
(2)More debugging info: 更为详细的 debug 信息
Extend unittest, but stay compatible and re-usable: 兼容 unittest
(3)Cross-Python compatibility: 支持多种 Python 版本 2.7, 3.3, 3.4, 3.5
关于该工具的详细使用这里就不再介绍了,有兴趣的小伙伴可以自己多学一下哦!那么到这里,python单元测试unittest系列文章也就结束了,后续还有其他系列文章,可以继续关注哦!
2019/01/11
Friday
小伙伴们,单元测试是任何编程语言都不可避免的哦,看完这篇文章你一定会有不一样的收获的,后面还有系列文章连载,请记得关注哦!如果你有需要,就添加我的公众号哦,里面分享有海量资源,包含各类数据、教程等,后面会有更多面经、资料、数据集等各类干货等着大家哦,重要的是全都是免费、无套路分享,有兴趣的小伙伴请持续关注!
推 荐 阅 读
python标准库系列教程(五)——unittest单元测试(上篇)
python标准库系列教程(五)——unittest单元测试(中篇)
python标准库系列教程(四)——collections库详细教程
python标准库系列教程(三)——operator库详细教程
python标准库系列教程(二)——functools (下篇)
python标准库系列教程(二)——functools (中篇)
python标准库系列教程(二)——functools (上篇)
赶紧关注我们吧
您的点赞和分享是我们进步的动力!
↘↘↘