设为首页 收藏本站
查看: 995|回复: 0

[经验分享] Python 使用 HTMLTestRunner.py 生成测试报告

[复制链接]
YunVN网友  发表于 2018-8-11 12:30:25 |阅读模式
  HTMLTestRunner 是 Python 标准库的 unittest 模块的一个扩展,它可以生成 HTML 的测试报告。
  HTMLTestRunner.py python2 版本
  下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html
  使用时,先建立一个”PyDev Package“,将下载下来的HTMLTestRunner.py文件拷贝在该目录下。
  例子:testcase5_dynamic.py
DSC0000.png

html_report.py:
DSC0001.png

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

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

2.HTMLTestRunner 脚本阅读。
DSC0004.png

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

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

DSC0006.png

DSC0007.png

  作者: 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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-550146-1-1.html 上篇帖子: python_day11のPython操作 pymysql && SQLAchemy 下篇帖子: python list unicode转中文显示
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表