zoukankan      html  css  js  c++  java
  • 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, ' Time Elapsed: %s' % (self.stopTime-self.startTime), 可改成 print(' Time 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"
  • 相关阅读:
    git fetch, merge, pull, push需要注意的地方
    记录一次数据库驱动配置引发的惨案
    IntelliJ Idea 常用快捷键列表
    数据库设计范式
    windows下mysql服务常用操作
    开源协议知多少
    Error creating bean
    Validation failed for query for method
    Not supported for DML operations
    404
  • 原文地址:https://www.cnblogs.com/du-hong/p/10794684.html
Copyright © 2011-2022 走看看