python标准库系列教程(五)——unittest库单元测试 (下篇)

声明:前面的python标准库系列文章详细讲解了Python的三大函数式编程库以及集合库,itertools、functools、operators库以及collections库,本文继续python标准库系列文章,本文为第五篇,深入详解python的单元测试原理以及unittest的基本架构,鉴于篇幅较长,第五篇将分为几个小的篇章说明,本文为下篇,后续还会有系列文章更新,希望对小伙伴有所帮助!
通过系列文章的上篇、中篇已经详细讲解了TestCase、TestLoader、TestSuite、TextTestRunner、TextTestResult这些基本架构的使用方法,这篇文章将详细介绍python其他的一些单元测试框架,主要是简要介绍一下HTMLTestRunner的使用

一、HTMLTestRunner

1、简单介绍

上面的两篇文章介绍了如何输出单元测试的结果,以及如何将输出结果保存为文本文件,但是txt格式的文本执行报告过于简陋,这里我们学习一下借助HTMLTestRunner生成HTML报告。HTMLTestRunner是某位大神基于unittest进行拓展的,可以将单元测试结果以网页的形式加以呈现。

遗憾的是:HTMLTestRunner目前是只支持python2.x版本,所以本文的所有代码均是针对python2.7版本的。

2、简单安装

首先需要下载HTMLTestRunner.py,下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html

它其实就是一个很小的.py文件,自己下载即可,不支持pip安装。然后

并放到当前目录下,这是针对某一个项目的;如果想要一劳永逸,也可以把它放在python目录下的Lib中,这样所有的跑一趟宏代码都可以使用了,就可以导入运行了。

3、简单实例

首先定义一个需要测试的模块functions.py。该模块里面有四个加减乘除测试函数,代码如下:

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

4、运行上面的代码,得到如下结果:

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文件,我们得到如下的结果,

上面通过表格的形式显示出来,一共测试4个,通过3个,失败一个,而且我们点开fail。可以查看具体失败的原因,点击fail,发现如下内容。

这是因为在python2中,除法/表示取整,%表示取余;

在python3中除法/表示真除法,而//表示取整,%表示取余。故而在python3中是通过的,在Python2中是不通过的。

总结:上面的网页展示相比较于单纯的文本表示,是不是美观方便很多?

二、其他单元测试工具Testtools

testtools is a set of extensions to the Python standard library’s unit testing framework.

testtools 是一个功能类似 unittest 的库,它集合众家标准测试库之所长,和 unittest 相比,功能更为强大,使用更为简单,OpenStack 广泛的利用它编写单元测试。由于在用法上 testtools 和 unittest 类似,所以本节简要介绍 testtols 的特点:

  • Better assertion methods: 支持 assertIn, assertIs, assertIsInstance 等 assertion
  • More debugging info: 更为详细的 debug 信息
  • Extend unittest, but stay compatible and re-usable: 兼容 unittest
  • Cross-Python compatibility: 支持多种 Python 版本 2.7, 3.3, 3.4, 3.5

关于该工具的详细使用这里就不再介绍了,有兴趣的小伙伴可以自己多学一下哦!那么到这里,python单元测试unittest系列文章也就结束了,后续还有其他系列文章,可以继续关注哦!

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值