使用 HTMLTestRunner.py
HTMLTestRunner.py python 2版本
下载地址: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 的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结果文件的方法。
使用 HTMLTestRunner.py的更多相关文章
- python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'的解决方法: 1.原因是官网的是python2语法写的,看官手动把官 ...
- unittest测试驱动之HTMLTestRunner.py
对于自动化来说,测试报告是必须的,在敏捷化的团队中,团队中的成员需要自动化这边提供自动化的测试报告,来判断系统的整体质量以及下一步的测试策略.单元测试库生成测试输出到控制台的窗口上,但是这样的结果看起 ...
- python3-如何正常使用HTMLTestRunner.py,生成自动化测试报告
其实HTMLTestRunner.py是基于python2开发的,为了使其支持python3环境,需要对其的部分内容进行修改.下面我们通过编辑器打开HTMLTestRunner.py文件(编辑器可以选 ...
- python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'解决办法
.原因是官网的是python2语法写的,看官手动把官网的HTMLTestRunner.py改成python3的语法: 参考:http://bbs.chinaunix.net/thread-415474 ...
- 简单的接口测试类和测试生成报告工具HTMLTestRunner.py
Demo.py #coding:utf-8 # import requests import json ''' data = { 'username':'jackson', 'password':'a ...
- python使用 HTMLTestRunner.py生成测试报告
HTMLTestRunner.py python 2版本 下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html 使用时,先建立一个”PyDe ...
- python HTMLTestRunner.py
Mac下HTMLTestRunner.py存放路径: -/anaconda/lib/python3.6/site-packages/HTMLTestRunner.py 已经更改,python3可以直接 ...
- mac 电脑下添加 HTMLtestrunner.py 生成 报表
HTMLTestRunner是Python标准库unittest模块的一个扩展.它生成易于使用的HTML测试报告. 1.下载HTMLTestRunner.py模块地址 http://tungwaiyi ...
- 自动化测试===unittest配套的HTMLTestRunner.py生成html报告源码
更改版: 全部复制,命名为 HTMLTestRunner.py 文件 #使用方法参见之前的文档:自动化测试===unittest和requests接口测试案例,测试快递查询api(二) " ...
随机推荐
- 导入sql时报日期类型错误
导入的脚本中有的日期类型数据是:0000-00-00 00:..这种格式的. 需要把这种格式修改一下.有的mysql版本不支持这种0000.设置成当前时间即可
- IOS应用程序生命周期&启动周期函数
—程序的生命周期 a.程序的生命周期是指应用程序启动到应用程序结束整个阶段的全过程 b.每一个IOS应用程序都包含一个UIApplication对象,IOS系统通过该U ...
- iOS app闪退的一般原因
1.函数无限递归爆栈(表视图返回Cell和返回行高的方法互相调用)2.某对象无法解析某个方法(没做类型转换.或者代理没实现某个方法)3.访问了某个已经被释放的对象(ARC之后不太有)4.从Bundle ...
- $.cookie('name', null) 删除cookie 失效问题
这几天在做网站的用户登录和退出功能,我使用jquery.cookie.js来操作cookie,但是用$.cookie('name', null) 总是失效, 后来使用$.cookie("na ...
- Sublime Text 3运行JavaScript控制台
Node.js是一个基于Chrome JavaScript运行时建立的平台,小巧方便搭建.运行的端口可以在浏览器上运行,显示效果,但每次用浏览器也挺麻烦,我们这里讲的是在sublime text2中配 ...
- Java hashCode 和 equals()
1 Object中定义的hashCode() public int hashCode() Returns a hash code value for the object. This method i ...
- java_设计模式_外观模式_Facade Pattern(2016-08-09)
外观模式/门面模式 1.概念 为子系统中的一组接口提供一个统一接口.Facade模式定义了一个高层接口,这个接口使得这子系统更容易使用. 2.UML 由于外观模式的结构图过于抽象,因此把它稍稍具体点. ...
- PHP中定义常量的几种方式与区别
[问]在php中定义常量时,const与define的区别? [答]使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数.另外const在编译时要比define快很 ...
- YII 小部件实现Area textArea
<?php echo $form->textArea($user_model,'introduce',array('cols'=>50,'rows'=>5)); ?>
- Firebase能改变什么(对SaaS,BaaS,PaaS,IaaS的解释比较清楚)
作为Google Cloud对标Amazon AWS重要的一环,Firebase能改变什么? 雷锋网 2016-05-25 12:18:49 查看源网址 阅读数:12 按:本文作者刘之,野狗CEO.野 ...