HTMLTestRunner.py的使用

HTMLTestRunner.py的使用下载地址 http tungwaiyip info software HTMLTestRunn html 使用时 先建立一个 PyDevPackage 将下载下来的 HTMLTestRunn py 文件拷贝在该目录下 例子 testcase5 dynamic pyimportunit widgetimport

下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html

使用时,先建立一个”PyDev Package“,将下载下来的HTMLTestRunner.py文件拷贝在该目录下。

例子:testcase5_dynamic.py

import unittest from dev.widget import Widget class WidgetTestCase(unittest.TestCase): def setUp(self): self.widget=Widget() def tearDown(self): self.widget.dispose() self.widget=None def testSize(self): self.assertEqual(self.widget.getSize(), (40,40), "Wrong") def testResize(self): self.widget.resize(100, 100) self.assertEqual(self.widget.getSize(), (100,100), "Wrong")

html_report.py:

#coding:utf-8

from lib import HTMLTestRunner
import unittest
from testcase5_dynamic import WidgetTestCase

if __name__=='__main__':
    suite=unittest.makeSuite(WidgetTestCase)
    filename='D:\\myreport.html'
    fp=file(filename,'wb')
    runner=HTMLTestRunner.HTMLTestRunner(fp,title=u'my unit test',description=u'This is a report test')
    runner.run(suite)

Run的时候,需要使用Python Run,使用Python unit-test跑测试生成不了myreport.html,目前还不知道为什么。

有时候,不会立即生成D:\\myreport.html,我们可以自己先建立一个空的myreport.html,这样再运行之后打开就会看到报告内容。

HTMLTestRunner.py的使用

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()

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

HTMLTestRunner.py 的使用备注

1. 问题: 执行测试用例的过程中,不会打印任何东西,导致上个厕所或第二天回来时,根本不知道执行到哪了,或者执行多少测试用例了。

解决思路: 每次执行一个测试用例时,就打印该测试用例的名称。

解决方案: 调用HTMLTestRunner时,定义 verbosity 为大于1的整数,比如说 2:

runner=HTMLTestRunner.HTMLTestRunner(fp,title=”xxxx”,description=”xxx”,verbosity=2)

在控制台console 就可以看到每执行一条用例,就会有如下输出:

E test (testcases.login.testcase1.MyTest) ok test (testcases.login.testcase2.MyTest) F test (testcases.login.testcase3.MyTest)

2. HTMLTestRunner 脚本阅读。

class OutputRedirector(object) # 将输出进行重定向 class Template_mixin(object) # 定义生成HTML结果文件所需要的模板。 # 如果我们想改变HTML的格式等待,可以在这里进行改动 class _TestResult(TestResult) # 定义继承自 unittest.TestResult 的 类。 # 这里重写了 unittest.TestResult 的多个方法,比如 startTest(self, test) 等等 class HTMLTestRunner(Template_mixin) # 这里可以说是使用 HTMLTestRunner.py 的入口。定义了多个我们可以看到的方法,比如 run(self, test) class TestProgram(unittest.TestProgram) # 这里继承自 unittest.TestProgram 类,重写了 runTests 方法。 # 用于命令行执行测试

3. 缺点:使用HTMLTestRunner的执行测试用例的过程中,如果中间中断执行,则已经执行完的用例结果也不会打印到html文件。

目前我这边是自己编写脚本生成html来代替使用 HTMLTestRunner ,感觉 HTMLTestRunner 应该没有每执行一条用例就讲结果写入到html结果文件的方法。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215428.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午1:56
下一篇 2026年3月18日 下午1:57


相关推荐

  • 评分卡设计_创建绿色饭店的原则

    评分卡设计_创建绿色饭店的原则本文主要讲“变量选择”“模型开发”“评分卡创建和刻度”变量分析首先,需要确定变量之间是否存在共线性,若存在高度相关性,只需保存最稳定、预测能力最高的那个。需要通过VIF(varianceinflationfactor)也就是方差膨胀因子进行检验。变量分为连续变量和分类变量。在评分卡建模中,变量分箱(binning)是对连续变量离散化(discretization)的一种称呼

    2025年8月22日
    3
  • 如何在docker容器中运行docker命令

    如何在docker容器中运行docker命令欢迎关注个人微信公众号:devopscube前言​Docker作为目前炙手可热的容器运行环境,越来越多的应用到应用的部署当中。这种一次打包,随处运行的模式备受好评,也节约了很多环境配置的麻烦。很多软件运行时都提供了docker的镜像部署方式,我们可以看到常用的组件,开源的项目,都会提供docker镜像,或者用于打包镜像的dockerfile。所以Docker已然成为了软件…

    2022年5月17日
    164
  • 第十七节:织梦做自定义表单在线预约的方法

    第十七节:织梦做自定义表单在线预约的方法

    2021年9月25日
    37
  • centOS7安装nginx及nginx配置「建议收藏」

    centOS7安装nginx及nginx配置「建议收藏」安装所需插件1、安装gccgcc是linux下的编译器在此不多做解释,感兴趣的小伙伴可以去查一下相关资料,它可以编译C,C++,Ada,ObjectC和Java等语言命令:查看gcc版本gcc-v一般阿里云的centOS7里面是都有的,没有安装的话会提示命令找不到,安装命令:yum-yinstallgcc2、pcre、pcre-…

    2022年4月27日
    121
  • 群 环 域_群环域属于什么学科

    群 环 域_群环域属于什么学科群(Group)两个元素二元运算得到一个新元素环(Ring)上tian’jia在阿贝尔群(交换群)

    2025年5月23日
    3
  • JMeter性能测试之负载与监听实战

    JMeter性能测试之负载与监听实战

    2021年7月13日
    99

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号