gpt4 book ai didi

python使用 HTMLTestRunner.py生成测试报告

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 27 4
gpt4 key购买 nike

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,这样再运行之后打开就会看到报告内容.

python使用 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 就可以看到每执行一条用例,就会有如下输出:

?
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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com