首页 前端知识 Selenium Python 自动化测试13(HTML报告)

Selenium Python 自动化测试13(HTML报告)

2024-08-18 22:08:10 前端知识 前端哥 162 780 我要收藏

        我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。

上一篇我们讨论了unittest中discover 的构建,可以组织测试更多测试用例。

         本篇文章我们接着讲。如何生成HTML报告,提高我们测试报告的可读性。

1、引入HTML报告

我们先看一下之前的测试结果:

之前的测试结果只是展示测试了3条用例,测试通过。

这个让测试人员来看还凑合,但是若是向领导展示或者其它不熟悉测试的同事来看就不太能看懂,也不太美观。这就需要HTMLTestRunner 来生成HTML报告。

2、HTMLTestRunner 简述

         HTMLTestRunner 是python 标准库unittest 单元测试框架的一个扩展,它生成方便使用的HTML报告。

         这个扩展使用起来很简单,只要一个HTMLTestRunner.py 文件,下载地址:

         http://tungwaiyip.info/software/HTMLTestRunner.html

         安装也非常简单,将HTMLTestRunner.py 放到...\Python37\Lib  目录下,

这里的系统时windows。Linux 也是类似的位置。

注意:若是下载的HTMLTestRunner.py针对python2写的,python3需要适当更改其内容:

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

举一个例子,如下图的修改后:

3、编写代码生成HTML报告

# coding=utf-8

import  unittest

from HTMLTestRunner import HTMLTestRunner  #导入 HTMLTestRunner 类

import time





#定义测试用例集的目录

test_dir = './'

report_dir = './report'  #测试报告地址

discover = unittest.defaultTestLoader.discover(test_dir,pattern="test_*.py")#所有要执行的文件



if __name__ == '__main__':

    now = time.strftime("%Y-%m-%d %H_%M_%S")   #当前时间,格式是年月日时分秒

    file_name report_dir+ '/' + now + 'result.html'   #报告名称,加上当前时间避免重复

    fp = open(file_name,'wb')      #打开报告文件,读写权限



    runner = HTMLTestRunner(stream=fp,title="Swag Labs 网站测试报告",description="用例测试情况:")#HTML报告设置

    runner.run(discover)  #执行测试案例

    fp.close()   #关闭报告文件

请参考以上代码练习,执行结果参考:

是不是明显比之前的报告提高了档次。

今天就讲到这里了。

每天进步一点点,加油!

转载请注明出处或者链接地址:https://www.qianduange.cn//article/15984.html
评论
发布的文章

安装Nodejs后,npm无法使用

2024-11-30 11:11:38

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!