HTMLTestRunner 是 Python 标准库的 unittest 模块的一个扩展,它可以生成 HTML 的测试报告。
HTMLTestRunner.py python2 版本
下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html
使用时,先建立一个”PyDev Package“,将下载下来的HTMLTestRunner.py文件拷贝在该目录下。
例子:testcase5_dynamic.py
html_report.py:
Run 的时候,需要使用 Python Run,使用 Python unit-test 跑测试生成不了myreport.html,目前还不知道为什么。
有时候,不会立即生成 D:\\myreport.html,我们可以自己先建立一个空的 myreport.html,这样再运行之后打开就会看到报告内容。
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 就可以看到每执行一条用例,就会有如下输出:
2.HTMLTestRunner 脚本阅读。
3. 缺点:使用 HTMLTestRunner 的执行测试用例的过程中,如果中间中断执行,则已经执行完的用例结果也不会打印到 html 文件。
目前我这边是自己编写脚本生成 html 来代替使用 HTMLTestRunner ,感觉 HTMLTestRunner 应该没有每执行一条用例就讲结果写入到 html 结果文件的方法。
测试案例:
登录百度云
进入“立即注册百度账号”网页
进入”会员中心”网页
生成测试报告的文件名为:2015-01-02result.html。
测试脚本:
作者: 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/