当前位置: 首页 > news >正文

python接口自动化测试报告_python接口自动化(二十八)--html测试 报告——下(详解)...

简介

五一小长假已经结束了,想必大家都吃饱喝足玩好了,那就继续学习吧。一天不学习,自己知道;两天不学习,对手知道;三天不学习,大家知道;一周不学习,智商输给猪。好了开个玩笑都逗大家一乐,但是想想还是有道理的。那就进

入正题:上一篇我们批量执行完用例后,已经生成的测试报告是生成 HTML 格式的。但是我们可以看出那个官方的测试报告既不美观也不大方,我们这里需要优化一下,优化的让人赏心悦目,就和看到一个美女一样看了一眼,忍不住回头再多

看一眼  - _ - 并且把上一篇遇到的问题列举解决一下。

python3如何改动下载的HTMLTestRunner

HTMLTestRunner.py 的python3 版本

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

1. 修改的地方

问题一: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')) 即可。

2. 保存

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

3. 调用语句更改

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

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

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

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

中文乱码

1、测试报告中,msg 自定义异常内容有中文情况会出现乱码,如图所示:

2、找到 HTMLTestRunner.py 文件,搜索:uo =

3、找到红色区域设置编码的两个地方

4、注释掉红色区域这两个设置,重新添加编码格式为:uo = o.decode('utf-8') ue = e.decode('utf-8'),或者在此基础上直接修给成uo = o.decode('utf-8') ue = e.decode('utf-8'),建议初学者还是用第一种方法。这样出错了,可以很快还原,否则

在碰到更复杂的代码直接修改就可能会遇到问题

5、修改好之后记得保存,重新运行,乱码问题就解决了

python3 报告问题

1、各位小伙伴可以按照我前边的方法进行自己修改,或者找我要也是可以,注意在修改的时候空格和Tab的问题,否则运行会报这样的错误

报告问题样式优化

1、优化是一些前端和CSS知识,在这里就不做详细介绍了,有兴趣的可以找我探讨一下,也可以和我要一下那个优化后的报告文件,优化后报告展示:

小结

1、关于生成报告,优化报告就是这么简单,小伙伴们练起来吧!

2、为了新的报告不会覆盖掉老的测试报告,可以按图中的红色部分圈起来的方法实现

3、参考代码(增加一行代码,测试报告的路径修改一下)

1 # 获取当前时间,这样便于下面的使用。2 now = time.strftime("%Y-%m-%M-%H_%M_%S", time.localtime(time.time()))3 #保存生成报告的路径4 report_path = "C:\\Users\\DELL\\PycharmProjects\\honggetest\\report\\result"+now+".html"

相关文章:

  • python对键和值有没有类型限制_python基础之-数据类型
  • python编程小白变大神_零基础Python,从小白到大神的方法全在这了!
  • 如果表不存在则创建_当创建一个文件的时候,操作系统发生了什么
  • 胖终端和瘦终端的区别_企业级无线覆盖与家庭级无线覆盖的区别与发展趋势
  • pythonnode js结合_Node js 和 python 混合编程之JSON入参的区别 如何转换js对象使其能在python脚本中作为python 字典直接使用...
  • sql 统计每月入职离职人数_说离职就离职,他们就不害怕失业吗,为什么90后的离职率那么高...
  • redis 端口_基础架构之Redis
  • python check module_Python 的 module 机制(重要)
  • springboot技术架构图_阿里技术专家告诉你:如何画出优秀的架构图
  • python嗅探m3u8_python通过m3u8下载视频
  • 安装python3.6.1的步骤_在Linux上安装Python3.6.1
  • python单词按字典序输出_python – 我可以通过匹配键作为前缀在字典中保留新单词...
  • 后台页面需要设置登录过期时间吗_电商后台优惠券设计
  • 机械制图符号_机械图纸感觉每一个都很复杂,这12个机械制图的简化画法,你会吗...
  • python爬虫基础教程115_清华学姐推荐的Python视频115集,拿走不谢 .
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 30秒的PHP代码片段(1)数组 - Array
  • axios 和 cookie 的那些事
  • Java,console输出实时的转向GUI textbox
  • Markdown 语法简单说明
  • MD5加密原理解析及OC版原理实现
  • Sass 快速入门教程
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 关于Java中分层中遇到的一些问题
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 解析 Webpack中import、require、按需加载的执行过程
  • 力扣(LeetCode)21
  • ​Java并发新构件之Exchanger
  • ${ }的特别功能
  • (1)(1.11) SiK Radio v2(一)
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (Ruby)Ubuntu12.04安装Rails环境
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (八)Flask之app.route装饰器函数的参数
  • (五)IO流之ByteArrayInput/OutputStream
  • (译)2019年前端性能优化清单 — 下篇
  • (转)视频码率,帧率和分辨率的联系与区别
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • ..回顾17,展望18
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .Net6使用WebSocket与前端进行通信
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • :中兴通讯为何成功
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @Import注解详解
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • [AutoSar]BSW_OS 02 Autosar OS_STACK
  • [AX]AX2012 R2 出差申请和支出报告
  • [c++] 自写 MyString 类
  • [C++][数据结构][算法]单链式结构的深拷贝
  • [C++从入门到精通] 14.虚函数、纯虚函数和虚析构(virtual)
  • [G-CS-MR.PS02] 機巧之形2: Ruler Circle