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、参考代码(增加一行代码,测试报告的路径修改一下)
# 获取当前时间,这样便于下面的使用。
now = time.strftime("%Y-%m-%M-%H_%M_%S", time.localtime(time.time()))
#保存生成报告的路径
report_path = "C:\\Users\\DELL\\PycharmProjects\\honggetest\\report\\result"+now+".html"
python接口自动化(二十八)--html测试 报告——下(详解)的更多相关文章
- python接口自动化(四)--接口测试工具介绍(详解)
		
简介 “工欲善其事必先利其器”,通过前边几篇文章的介绍,大家大致对接口有了进一步的认识.那么接下来让我们看看接口测试的工具有哪些. 目前,市场上有很多支持接口测试的工具.利用工具进行接口测试,能够提供 ...
 - python接口自动化(十八)--重定向(Location)(详解)
		
简介 在实际工作中,有些接口请求完以后会重定向到别的url,而你却需要重定向前的url.URL主要是针对虚拟空间而言,因为不是自己独立管理的服务器,所以无法正常进行常规的操作.但是自己又不希望通过主域 ...
 - python接口自动化测试二十八:连接SQL sever操作
		
1.中文乱码问题: (1).文件头加上# -*- coding:utf-8 -*- 或者 #coding=utf8 (2).pymssql.connect连接串中charset是要跟你数据库的编码一样 ...
 - Vue.js 源码分析(二十八) 高级应用 transition组件 详解
		
transition组件可以给任何元素和组件添加进入/离开过渡,但只能给单个组件实行过渡效果(多个元素可以用transition-group组件,下一节再讲),调用该内置组件时,可以传入如下特性: n ...
 - Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(上)
		
前言 Android中绘图离不开的就是Canvas了,Canvas是一个庞大的知识体系,有Java层的,也有jni层深入到Framework.Canvas有许多的知识内容,构建了一个武器库一般,所谓十 ...
 - Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(下)
		
LinearGradient 线性渐变渲染器 LinearGradient中文翻译过来就是线性渐变的意思.线性渐变通俗来讲就是给起点设置一个颜色值如#faf84d,终点设置一个颜色值如#CC423C, ...
 - python接口自动化(十)--post请求四种传送正文方式(详解)
		
简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...
 - VS2010/MFC编程入门之三十八(状态栏的使用详解)
		
上一节中鸡啄米讲了工具栏的创建.停靠与使用,本节来讲解状态栏的知识. 状态栏简介 状态栏相信大家在很多窗口中都能见到,它总是用来显示各种状态.状态栏实际上也是一个窗口,一般分为几个窗格,每个窗格分别用 ...
 - python接口自动化(十二)--https请求(SSL)(详解)
		
简介 本来最新的requests库V2.13.0是支持https请求的,但是一般写脚本时候,我们会用抓包工具fiddler,这时候会 报:requests.exceptions.SSLError: [ ...
 - python接口自动化(十六)--参数关联接口后传(详解)
		
简介 大家对前边的自动化新建任务之后,接着对这个新建任务操作了解之后,希望带小伙伴进一步巩固胜利的果实,夯实基础.因此再在沙场实例演练一下博客园的相关接口.我们用自动化发随笔之后,要想接着对这篇随笔操 ...
 
随机推荐
- 关于WPF XAML 中 Trigger的反向ExitActions
			
触发器,顾名思义,就是当满足一定条件时,会触发一些操作,比如:改变控件的透明度,显隐,宽高等等,触发器本身做了一些操作,就是触发器触发条件不符合的时候,会自动把在触发器中更改的属性还原.但,并不是所有 ...
 - 微信小程序把玩(二十二)action-sheet组件
			
原文:微信小程序把玩(二十二)action-sheet组件 action-sheet组件是从底部弹出可选菜单项,估计也是借鉴IOS的设计添加的,action-sheet有两个子组件, action-s ...
 - 零元学Expression Blend 4 – Chapter 21 以实作案例学习MouseDragElementBehavior
			
原文:零元学Expression Blend 4 – Chapter 21 以实作案例学习MouseDragElementBehavior 本章将教大家如何运用Blend 4内建的行为注入元件「Mou ...
 - Android Studio 添加 Genymotion插件
			
原文:Android Studio 添加 Genymotion插件 1.下载Genymotion:官网地址,必须先注册才能下载,下载带有VirtualBox的版本 2.安装:安装时会连VirtualB ...
 - 浅谈Linux(Centos7.4)环境下NTP服务器的构建
			
 一.软件环境 1.操作系统版本 [root@Geeklp201 etc]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core ...
 - Delphi XE6 如何设计并使用FireMonkeyStyle
			
介绍 FireMonkey使用Style来控制控件的显示方式. 每个控件都有一个StyleLookup属性,FireMonkey就是通过控件的这个属性来在当前窗体的StyleBook控件中查找匹配 ...
 - 解除.NET中虚拟路径的疑惑
			
今天部署产品时,发现一个涉及到路径错误的bug,在开发环境下都OK,但是到了测试环境中却一直报错,经过一番排查,原来错误出在了HttpContext.Current.Server.MapPath这个方 ...
 - 302Java_前定义
			
第零章 前定义 1 介绍 1.1 简介 Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征. ...
 - vue2.0父子组件以及非父子组件通信传参详解
			
1.父组件传递数据给子组件 父组件数据如何传递给子组件呢?可以通过props属性来实现 父组件: <parent> <child :child-msg="msg" ...
 - Flink UDF
			
本文会主要讲三种udf: ScalarFunction TableFunction AggregateFunction 用户自定义函数是非常重要的一个特征,因为他极大地扩展了查询的表达能力.本文除了介 ...