发表于 2018-8-11 12:30:25

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

  HTMLTestRunner 是 Python 标准库的 unittest 模块的一个扩展,它可以生成 HTML 的测试报告。
  HTMLTestRunner.py python2 版本
  下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html
  使用时,先建立一个”PyDev Package“,将下载下来的HTMLTestRunner.py文件拷贝在该目录下。
  例子:testcase5_dynamic.py

html_report.py:
Run 的时候,需要使用 Python Run,使用 Python unit-test 跑测试生成不了myreport.html,目前还不知道为什么。  有时候,不会立即生成 D:\\myreport.html,我们可以自己先建立一个空的myreport.html,这样再运行之后打开就会看到报告内容。

  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 就可以看到每执行一条用例,就会有如下输出:

2.HTMLTestRunner 脚本阅读。
  3. 缺点:使用 HTMLTestRunner 的执行测试用例的过程中,如果中间中断执行,则已经执行完的用例结果也不会打印到 html 文件。
  目前我这边是自己编写脚本生成 html 来代替使用 HTMLTestRunner ,感觉 HTMLTestRunner 应该没有每执行一条用例就讲结果写入到 html 结果文件的方法。
  测试案例:

[*]  登录百度云
[*]  进入“立即注册百度账号”网页
[*]  进入”会员中心”网页
[*]  生成测试报告的文件名为:2015-01-02result.html。
  测试脚本:



  作者: anlcy
  原文链接:http://www.cnblogs.com/camilla/p/7243044.html
  Python 实战班 17 期报名开始
  招生要求:
  
  想往开发或者运维开发方向发展,Python 基础为零或薄弱,但能读懂 shell 或者其它任何一门语言的同学。
  课程内容:
  精简版 CMDB

[*]  html+css+js 多种前端技术结合
[*]  ajax 异步请求操作
[*]  分页搜索功能
[*]  常见数据库设计原则、CMDB 表结构实战、Mysql 实操
[*]  独立完项目、了解完整的 Web(LAMP) 架构
  Nginx 日志统计分析与多为可视化

[*]  用 Python 处理Nginx日志文件,进行多维度数据统计分析
[*]  根据 ip、访问地址和访问状态等数据统计,统计结果存入数据库
[*]  Highcharts 等流行前端技术多维度,将分析结果可视化展示
  快速构建使用监控系统

[*]  Python 读取机器的实时使用数据,通过 Http请求将数据入库
[*]  设计数据入库的 API,收集不同机器的数据
[*]  前端将内存数据读出,视化展示折线图
[*]  独立完成项目,掌握 Python 常用的 time 等模块
  咨询报名联系:
  QQ(1):979950755    小月
  QQ(2):279312229    ada
  WeChat : 1902433859   小月
  WeChat : 1251743084   小单
  开课时间:11月26日
  课程大纲:http://51reboot.com/course/actual/
页: [1]
查看完整版本: Python 使用 HTMLTestRunner.py 生成测试报告