Python 使用 HTMLTestRunner.py 生成测试报告

时间:2022-01-17 18:33:37

HTMLTestRunner 是 Python 标准库的 unittest 模块的一个扩展,它可以生成 HTML 的测试报告。


HTMLTestRunner.py python2 版本

下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html


使用时,先建立一个”PyDev Package“,将下载下来的HTMLTestRunner.py文件拷贝在该目录下。

例子:testcase5_dynamic.py

Python 使用 HTMLTestRunner.py 生成测试报告

html_report.py:

Python 使用 HTMLTestRunner.py 生成测试报告

Run 的时候,需要使用 Python Run,使用 Python unit-test 跑测试生成不了myreport.html,目前还不知道为什么。

有时候,不会立即生成 D:\\myreport.html,我们可以自己先建立一个空的  myreport.html,这样再运行之后打开就会看到报告内容。




Python 使用 HTMLTestRunner.py 生成测试报告

HTMLTestRunner.py 的 python3 版本


由于 HTMLTestRunner.py 原本就是 python2 版本,目前还没找到 python3 版本,所以需要我们自己修改 HTMLTestRunner.py 文件。


修改的地方


问题一:No module named StringIO


原因:python 3 中 没有 StringIO 这个模块。这里我们需要使用io 这个模块来代替。


解决方法:第 94 行引入的名称要改,从 import StringIO 改成 import io。


相应的,539 行 self.outputBuffer = StringIO.StringIO() 要改成 self.outputBuffer = io.BytesIO()


问题二:AttributeError: 'dict' object has no attribute 'has_key'


原因:python 3 字典类型的object 已经不支持 has_key 函数,我们需要使用 in 来进行遍历。


解决方法:定位到 642 行,if not rmap.has_key(cls): 需要换成 if not cls in rmap:


问题三:'str' object has no attribute 'decode'


原因:python3 里面对字符的操作中,decode已经拿掉了。


解决方法:定位到 772 行,把 ue = e.decode('latin-1') 直接改成 ue = e 。


另外 766 还有类似的 uo = o.decode('latin-1'),改成 uo=o ;


问题四 :TypeError: can't concat bytes to str


原因:定位一下,报在了 778 行的内容 escape(uo+ue) 。这是因为我们上面给   uo 赋值的时候,走的是 else 流程,uo 被赋值的是 bytes 类型的值。 而 bytes类型不能直接转化为 str 类型。所以我们需要在前面给 uo 赋值的时候先将 bytes 类型转换为 str 类型。


解决方法:修改 768 行的 uo = o ,直接改成 uo = o.decode('utf-8') 。


另外 774 还有类似的  ue = e, 改成 ue = e.decode('utf-8')。


问题五:TypeError: unsupported operand type(s) for >>: 'builtin_function_or_method' and 'RPCProxy'


原因: python3  不支持 print >> sys.stderr 这种写法,这里定义输出流的话,采用 print("This is print str",file=sys.stderr) 这种方式。


解决方法:定位到 631 行,把 print 的语句修改掉,原来是 print >>sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime), 可改成 print('\nTime Elapsed: %s' % (self.stopTime-self.startTime),file=sys.stderr)


问题六:TypeError: 'str' does not support the buffer interface


原因:定位一下,问题出在 118 行,这里 s 是 str 类型,我们需要把传过来的 s转化为 bytes 类型。


解决方法:定位到 118 行,把 self.fp.write(s) 修改为 self.fp.write(bytes(s,'UTF-8')) 即可。


保存

修改后对 HTMLTestRunner.py 保存一下。


调用语句更改


python3 里面打开文件使用 open,不要再去用 file 了。


即 fp = file(filename,'wb') 替换成 fp = open(filename,'wb');


关闭该文件可用 fp.close()


备注: 改动之后,中文也不会乱码。


HTMLTestRunner.py 的使用备注


1、问题: 执行测试用例的过程中,不会打印任何东西,导致上个厕所或第二天回来时,根本不知道执行到哪了,或者执行多少测试用例了。


解决思路: 每次执行一个测试用例时,就打印该测试用例的名称。


解决方案: 调用HTMLTestRunner时,定义 verbosity 为大于1的整数,比如说 2:

runner=HTMLTestRunner.HTMLTestRunner(fp,title="xxxx",description="xxx",verbosity=2)


在控制台console 就可以看到每执行一条用例,就会有如下输出:


Python 使用 HTMLTestRunner.py 生成测试报告

2.HTMLTestRunner 脚本阅读。

Python 使用 HTMLTestRunner.py 生成测试报告

3. 缺点:使用 HTMLTestRunner 的执行测试用例的过程中,如果中间中断执行,则已经执行完的用例结果也不会打印到 html 文件。


目前我这边是自己编写脚本生成 html 来代替使用 HTMLTestRunner ,感觉 HTMLTestRunner 应该没有每执行一条用例就讲结果写入到 html 结果文件的方法。


测试案例: 

  1. 登录百度云 

  2. 进入“立即注册百度账号”网页 

  3. 进入”会员中心”网页 

  4. 生成测试报告的文件名为:2015-01-02result.html。


测试脚本:


Python 使用 HTMLTestRunner.py 生成测试报告

Python 使用 HTMLTestRunner.py 生成测试报告

Python 使用 HTMLTestRunner.py 生成测试报告


作者: anlcy

原文链接:http://www.cnblogs.com/camilla/p/7243044.html





Python 实战班 17 期报名开始


招生要求:


想往开发或者运维开发方向发展,Python 基础为零或薄弱,但能读懂 shell 或者其它任何一门语言的同学。


课程内容:


精简版 CMDB

 
  1. html+css+js 多种前端技术结合

  2. ajax 异步请求操作

  3. 分页搜索功能

  4. 常见数据库设计原则、CMDB 表结构实战、Mysql 实操

  5. 独立完项目、了解完整的 Web(LAMP) 架构



Nginx 日志统计分析与多为可视化

 
  1. Python 处理 Nginx 日志文件,进行多维度数据统计分析

  2. 根据 ip、访问地址和访问状态等数据统计,统计结果存入数据库

  3. Highcharts 等流行前端技术多维度,将分析结果可视化展示



快速构建使用监控系统

 
  1. Python 读取机器的实时使用数据,通过 Http 请求将数据入库

  2. 设计数据入库的 API收集不同机器的数据

  3. 前端将内存数据读出,视化展示折线图

  4. 独立完成项目,掌握 Python 常用的 time 等模块





咨询报名联系:

QQ(1):979950755    小月   

QQ(2):279312229    ada   

WeChat : 1902433859   小月

WeChat : 1251743084   小单


开课时间11月26日


课程大纲http://51reboot.com/course/actual/