使用HTMLTestRunner生成报告

unittest本身并不具备这个功能,需要使用HTMLTestRunner库

使用步骤:

  1. 首先需要下载.py文件:http://tungwaiyip.info/software/HTMLTestRunner.html
  2. 下载后放入python安装目录的lib文件夹下面供全局项目使用,或者放在本项目下供本项目单独用。
  3. 打开终端进入python交互模式导入HTMLTestRunner ,如果无导入错误显示,则说明添加成功

    import HTMLTestRunner

注意:python3的stringIO有变化,使用该HTMLTestRunner会报错ImportError: No module named 'StringIO'。这里使用python2.7试验。

1 help()查看类帮助信息

为了说明在报告中显示用例的注释,这里先了解下help()帮助函数。

help帮助信息息都是代码中通过 '''xxx ''' 或者 """xxx""" 注释符号来标注的。

如我们自定义一个模块helpin.py,并将其放入python目录的lib文件夹下面:

#coding=utf-8
u'''
这是help能够显示的帮助信息
'''
def add(a):
u"""这个函数用来输入a的值"""
print 'a'

在cmd命令行中,进入python27的交互模式,导入后通过help查看帮助信息:

>>> import helpin
>>> help(helpin)
Help on module helpin:
NAME
helpin - 这是help能够显示的帮助信息
FILE
e:\python27\lib\helpin.py
FUNCTIONS
add(a)
这个函数用来输入a的值

2 报告中显示用例的注释

给报告中的每个测试用例添加注释,来说明该测试用例是用来干什么的,非常有必要。

通过help()函数来查看HTMLTestRunner类的详细说明:

>>> import HTMLTestRunner
>>> help(HTMLTestRunner)

可以看到该类的注释说明,一个好的开源的框架应该有这样的规范。

这里在每个测试函数的下方添加上注释:

    def test_equal(self):
u'''这里是测试a和b的两个值是否相等'''
a = 1
b = 2
self.assertEqual(a,b)

运行后,打开生成的html文件可以看到,每个测试用例函数的后面有该用例的注释。

如图:

注意:

testcase的注释放在一行,如果换行了就显示不了,解析成字符串:

    def test_login_status(self):
"""测试有未填写项时,登陆按钮的状态"""

不能写成:

    def test_login_status(self):
"""
测试有未填写项时,登陆按钮的状态
"""

3 动态生成需要多次执行的测试报告文件名称

如果一个测试套件需要多次执行,如果每次执行不去修改测试报告.html的文件名,则每次执行后会将之前的报告覆盖。如果想要保存每次执行的结果而不手动修改报告名称。这里可以使用动态生成文件名的方法。具体的生成可以根据需要来写动态生成的代码。

动态时间

python 时间函数:

  1. time.time() 获取当前时间戳。
  2. time.ctime() 当前时间的字符串形式。
  3. time.localtime() 当前时间的 struct_time 形式。
  4. time.strftime() 用来获得当前时间,可以将时间格式化为字符串。

修改之前的代码,将文件名字中添加上当前获取到的时间:

#获取当前时间
now = time.strftime("%Y-%m-%d-%H_%M_%S")
report_path = "report/%s_report.html" % now

生成的文件名称以2016-03-09-17_37_26_result.html格式出现。

if __name__ == "__main__":
# unittest.main()
login_test_suite = unittest.TestSuite()
login_test_suite.addTest(Login('test_login_status'))
login_test_suite.addTest(Login('test_login_success'))
login_test_suite.addTest(Login('test_login_failed')) now = time.strftime("%Y-%m-%d-%H_%M_%S")
report_path = "report/%s_report.html" % now
fp = file(report_path, "wb")
runner = HTMLTestRunner.HTMLTestRunner(
stream=fp,
title=u"登陆页面报告",
description=u"测试结果"
)
runner.run(login_test_suite)

4 集成多个测试结果

目前测试报告只集成到了单个测试文件中,我们的最终目的是将其集成到一个文件中。

之前是通过testunit.addTests()函数逐个添加。

现在通过unittest.defaultTestLoader.discover()方法循环遍历添加测试用例。

最后通过runner.run()方法运行整个测试用例集。

问题

中文无法显示

 assert text == "ç™»å½•è´¦å·æˆ–å¯†ç é”™è¯¯2"

解决:

修改HTMLTestRunner.py里面错误输出进行转码:

773 行左右,latin-1修改为utf-8

    uo = o.decode('utf-8')

使用HTMLTestRunner生成报告的更多相关文章

  1. HTMLTestRunner生成报告 中文展示乱码的问题

  2. 9-Unittest+HTMLTestRunner不能生成报告解决方法

    1.问题现象 在使用HTMLTestRunner生成测试报告时,出现程序运行不报错,但不能生成报告的情况. 刚开始找了很久没发现问题,后来加上打印信息,发现根本没执行生成报告这部分代码.最后网上找到原 ...

  3. Selenium HTMLTestRunner 执行测试成功但无法生成报告

    为什么用PyCharm或者Eclipse执行测试成功但无法生成HTMLTestRunner报告 最近遇到一些人问这样的问题: 他们的代码写的没问题,执行也成功了,但就是无法生成HTMLTestRunn ...

  4. 『心善渊』Selenium3.0基础 — 29、使用HTMLTestRunner生成unittest的HTML报告

    目录 1.HTMLTestRunner介绍 2.HTMLTestRunner的使用 3.测试报告示例 4.封装成模块 1.HTMLTestRunner介绍 HTMLTestRunner是一个基于uni ...

  5. day11_单元测试_读取yaml文件中的用例,自动获取多个yaml文件内容执行生成报告

    一.使用.yaml格式的文件直接可以存放字典类型数据,如下图,其中如果有-下一行有缩进代表这是个list,截图中是整体是一个list,其中有两部分,第二部分又包含另外一个list 二.单元测试:开发自 ...

  6. 执行用例,并生成报告——discover,HTMLRunner

    HTMLRunner需要下载Python3的格式,懒人链接:http://pan.baidu.com/s/1tp3Ts 参考:http://bbs.chinaunix.net/thread-41547 ...

  7. Python3和HTMLTestRunner生成html测试报告

    1.测试环境: Python3.5+unittest+HTMLTestRunner 2.下载HTMLTestRunner.py文件 下载地址 http://tungwaiyip.info/softwa ...

  8. Python&Selenium借助HTMLTestRunner生成自动化测试报告

    一.摘要 本篇博文介绍Python和Selenium进行自动化测试时,借助著名的HTMLTestRunner生成自动化测试报告 HTMLTestRunner.py百度很多,版本也很多,自行搜索下载放到 ...

  9. Python&Selenium借助html-testRunner生成自动化测试报告

    一.摘要 本博文将介绍Python和Selenium进行自动化测试时,借助html-testRunner 生成自动化测试报告 安装命令:pip install html-testRunner 二.测试 ...

随机推荐

  1. 服务器模型---socket!!!

    /*********************服务器模型******************/ 一.循环服务器:循环服务器在同一时刻只可以相应一个客户端请求: 二.并发服务器:并发服务器在同一时刻可以相 ...

  2. PyTorch Hub发布!一行代码调用最潮模型,图灵奖得主强推

    为了调用各种经典机器学习模型,今后你不必重复造轮子了. 刚刚,Facebook宣布推出PyTorch Hub,一个包含计算机视觉.自然语言处理领域的诸多经典模型的聚合中心,让你调用起来更方便. 有多方 ...

  3. POJ 3680 Intervals 最小费用最大流(MCMF算法)

    题意:给出 n ,k 表示接下来给你 n 段开区间,每段区间都有它的权值,问选出一些区间,使它的权值最大,并且在实轴上的每个点,不得超过 k次被覆盖. 思路:首先要理解建图思路,首先有一个基图,相邻点 ...

  4. Thread --三大特性 原子性,可见性,有序性

    原子性.可见性.有序性 什么是原子性 即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行. 一个很经典的例子就是银行账户转账问题: 比如从账户A向账户B转1000元, ...

  5. java模拟栈的操作

    栈是一种有序列表,可以使用数组的结构来储存栈的数据内容 思路 1. 创建一个栈类StackArray 2. 定义一个top来模拟栈顶,初始化为-1 3. 入栈: 当有数据加入到栈的时候 top++ s ...

  6. 《 OO第一作业周期(前四周)总结 》

    作为一名软件工程的大学生,很高兴能够以这样一种方式,实现对博客编写零的突破.专业课老师也介绍了编写博客给我们带来的帮助,听了以后,我感觉到了培养出写博客的习惯,是一件多么有意义的事! 话不多说,让我们 ...

  7. Unity引擎入门——制作第一个2D游戏(1)

    Unity作为当今最流行的游戏引擎之一,受到各大厂商的喜爱. 像是炉石传说,以及最近的逃离塔克夫,都是由unity引擎开发制作. 作为初学者的我们,虽然无法直接做出完成度那么高的作品,但每一个伟大的目 ...

  8. Blazor入门笔记(2)-分部类组件与组件的继承

    1.前言 本文接自Blazor的组件(1)-从0构建一个组件 2.分部类组件 Razor组件你可理解为就是一个类名与文件名相同的类,因此,可以新建一个同名的partial类,将组件中@code里面的代 ...

  9. CentOS 通过 expect 批量远程执行脚本和命令

    我们有时可能会批量去操作服务器,比如批量在服务器上上传某个文件,安装软件,执行某个命令和脚本,重启服务,重启服务器等,如果人工去一台台操作的话会特别繁琐,并浪费人力. 这时我们可以使用expect,向 ...

  10. (js描述的)数据结构 [数组的一些补充](1)

    (js描述的)数据结构 [数组的一些补充](1) 1. js的数组: 1.优点:高度封装,对于数组的操作就是调用API 2.普通语言的数组: 1.优点:根据index来查询,修改数据效率很高 2.缺点 ...