- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章python使用 HTMLTestRunner.py生成测试报告由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文介绍了python使用 HTMLTestRunner.py生成测试报告 ,分享给大家,具体如下:
HTMLTestRunner.py python 2版本 。
下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html 。
使用时,先建立一个”PyDev Package“,将下载下来的HTMLTestRunner.py文件拷贝在该目录下.
例子:testcase5_dynamic.py 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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:
1
2
3
4
5
6
7
8
9
10
11
12
|
#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 就可以看到每执行一条用例,就会有如下输出:
1
2
3
|
E test (testcases.login.testcase1.MyTest)
ok test (testcases.login.testcase2.MyTest)
F test (testcases.login.testcase3.MyTest)
|
2. HTMLTestRunner 脚本阅读.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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结果文件的方法.
测试案例: 1.登录百度云 2.进入“立即注册百度账号”网页 3.进入”会员中心”网页 4.生成测试报告的文件名为:2015-01-02result.html.
测试脚本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
#coding=utf-8 #防止中文乱码
from
selenium
import
webdriver
from
selenium.webdriver.common.by
import
By
#加载键盘使用的模块
from
selenium.webdriver.common.keys
import
Keys
from
selenium.webdriver.support.ui
import
Select
from
selenium.common.exceptions
import
NoSuchElementException
#加载unittest模块
import
unittest
import
time
import
re
#加载HTMLTestRunner,用于生成HTMLreuslt
import
HTMLTestRunner
class
BaiduYun(unittest.TestCase):
def
setUp(
self
):
self
.browser
=
webdriver.Chrome()
self
.browser.implicitly_wait(
30
)
self
.base_url
=
"http://yun.baidu.com"
self
.verficationErrors
=
[]
self
.accept_next_alert
=
True
def
Login(
self
):
browser
=
self
.browser
browser.get(
self
.base_url
+
'/'
)
u
"""百度云登录"""
browser.find_element_by_name(
"userName"
).clear()
username
=
browser.find_element_by_name(
"userName"
)
username.send_keys(
"alu***"
)
username.send_keys(Keys.TAB)
time.sleep(
2
)
password
=
browser.find_element_by_name(
"password"
)
password.send_keys(
"***"
)
password.send_keys(Keys.ENTER)
time.sleep(
3
)
browser.close()
def
Register(
self
):
browser
=
self
.browser
browser.get(
self
.base_url
+
'/'
)
u
"""立即注册百度账号"""
browser.find_element_by_class_name(
"link-create"
).click()
time.sleep(
2
)
browser.close()
def
Link(
self
):
browser
=
self
.browser
browser.get(
self
.base_url
+
'/'
)
u
"""会员中心"""
browser.find_element_by_link_text(
"会员中心"
).click()
time.sleep(
2
)
browser.close()
def
tearDown(
self
):
self
.browser.quit()
self
.assertEqual([],
self
.verficationErrors)
if
__name__
=
=
"__main__"
:
#unittest.main()
testunit
=
unittest.TestSuite()
#将测试用例加入到测试容器中
testunit.addTest(BaiduYun(
"Login"
))
testunit.addTest(BaiduYun(
"Register"
))
testunit.addTest(BaiduYun(
"Link"
))
#获取当前时间,这样便于下面的使用。
now
=
time.strftime(
"%Y-%m-%M-%H_%M_%S"
,time.localtime(time.time()))
#打开一个文件,将result写入此file中
fp
=
open
(
"result"
+
now
+
".html"
,
'wb'
)
runner
=
HTMLTestRunner.HTMLTestRunner(stream
=
fp,title
=
'test result'
,description
=
u
'result:'
)
runner.run(testunit)
fp.close()
|
F5,运行,就这样得到了test result 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:http://www.cnblogs.com/camilla/p/7243044.html 。
最后此篇关于python使用 HTMLTestRunner.py生成测试报告的文章就讲到这里了,如果你想了解更多关于python使用 HTMLTestRunner.py生成测试报告的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我在网上搜索但没有找到任何合适的文章解释如何使用 javascript 使用 WCF 服务,尤其是 WebScriptEndpoint。 任何人都可以对此给出任何指导吗? 谢谢 最佳答案 这是一篇关于
我正在编写一个将运行 Linux 命令的 C 程序,例如: cat/etc/passwd | grep 列表 |剪切-c 1-5 我没有任何结果 *这里 parent 等待第一个 child (chi
所以我正在尝试处理文件上传,然后将该文件作为二进制文件存储到数据库中。在我存储它之后,我尝试在给定的 URL 上提供文件。我似乎找不到适合这里的方法。我需要使用数据库,因为我使用 Google 应用引
我正在尝试制作一个宏,将下面的公式添加到单元格中,然后将其拖到整个列中并在 H 列中复制相同的公式 我想在 F 和 H 列中输入公式的数据 Range("F1").formula = "=IF(ISE
问题类似于this one ,但我想使用 OperatorPrecedenceParser 解析带有函数应用程序的表达式在 FParsec . 这是我的 AST: type Expression =
我想通过使用 sequelize 和 node.js 将这个查询更改为代码取决于在哪里 select COUNT(gender) as genderCount from customers where
我正在使用GNU bash,版本5.0.3(1)-发行版(x86_64-pc-linux-gnu),我想知道为什么简单的赋值语句会出现语法错误: #/bin/bash var1=/tmp
这里,为什么我的代码在 IE 中不起作用。我的代码适用于所有浏览器。没有问题。但是当我在 IE 上运行我的项目时,它发现错误。 而且我的 jquery 类和 insertadjacentHTMl 也不
我正在尝试更改标签的innerHTML。我无权访问该表单,因此无法编辑 HTML。标签具有的唯一标识符是“for”属性。 这是输入和标签的结构:
我有一个页面,我可以在其中返回用户帖子,可以使用一些 jquery 代码对这些帖子进行即时评论,在发布新评论后,我在帖子下插入新评论以及删除 按钮。问题是 Delete 按钮在新插入的元素上不起作用,
我有一个大约有 20 列的“管道分隔”文件。我只想使用 sha1sum 散列第一列,它是一个数字,如帐号,并按原样返回其余列。 使用 awk 或 sed 执行此操作的最佳方法是什么? Accounti
我需要将以下内容插入到我的表中...我的用户表有五列 id、用户名、密码、名称、条目。 (我还没有提交任何东西到条目中,我稍后会使用 php 来做)但由于某种原因我不断收到这个错误:#1054 - U
所以我试图有一个输入字段,我可以在其中输入任何字符,但然后将输入的值小写,删除任何非字母数字字符,留下“。”而不是空格。 例如,如果我输入: 地球的 70% 是水,-!*#$^^ & 30% 土地 输
我正在尝试做一些我认为非常简单的事情,但出于某种原因我没有得到想要的结果?我是 javascript 的新手,但对 java 有经验,所以我相信我没有使用某种正确的规则。 这是一个获取输入值、检查选择
我想使用 angularjs 从 mysql 数据库加载数据。 这就是应用程序的工作原理;用户登录,他们的用户名存储在 cookie 中。该用户名显示在主页上 我想获取这个值并通过 angularjs
我正在使用 autoLayout,我想在 UITableViewCell 上放置一个 UIlabel,它应该始终位于单元格的右侧和右侧的中心。 这就是我想要实现的目标 所以在这里你可以看到我正在谈论的
我需要与 MySql 等效的 elasticsearch 查询。我的 sql 查询: SELECT DISTINCT t.product_id AS id FROM tbl_sup_price t
我正在实现代码以使用 JSON。 func setup() { if let flickrURL = NSURL(string: "https://api.flickr.com/
我尝试使用for循环声明变量,然后测试cols和rols是否相同。如果是,它将运行递归函数。但是,我在 javascript 中执行 do 时遇到问题。有人可以帮忙吗? 现在,在比较 col.1 和
我举了一个我正在处理的问题的简短示例。 HTML代码: 1 2 3 CSS 代码: .BB a:hover{ color: #000; } .BB > li:after {
我是一名优秀的程序员,十分优秀!