本文介绍了python使用 HTMLTestRunner.py生成测试报告 ,分享给大家,具体如下:
HTMLTestRunner.py python 2版本
下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html
使用时,先建立一个”PyDev Package“,将下载下来的HTMLTestRunner.py文件拷贝在该目录下。
例子:testcase5_dynamic.py
import unittestfrom dev.@R_502_5537@ import @R_502_5537@class @R_502_5537@TestCase(unittest.TestCase): def setUp(self): self.@R_502_5537@=@R_502_5537@() def tearDown(self): self.@R_502_5537@.dispose() self.@R_502_5537@=None def testSize(self): self.assertEqual(self.@R_502_5537@.getSize(),(40,40),"Wrong") def testResize(self): self.@R_502_5537@.resize(100,100) self.assertEqual(self.@R_502_5537@.getSize(),(100,100),"Wrong")
HTML_report.py:
#Coding:utf-8from lib import HTMLTestRunnerimport unittestfrom testcase5_dynamic import @R_502_5537@TestCaseif __name__=='__main__': suite=unittest.makeSuite(@R_502_5537@TestCase) 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结果文件的方法。
测试案例:
1.登录百度云
2.进入“立即注册百度账号”网页
3.进入”会员中心”网页
4.生成测试报告的文件名为:2015-01-02result.HTML。
测试脚本:
#Coding=utf-8 #防止中文乱码from selenium import webdriverfrom selenium.webdriver.common.by import By#加载键盘使用的模块from selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support.ui import Selectfrom selenium.common.exceptions import NoSuchElementException#加载unittest模块import unittest import timeimport re#加载HTMLTestRunner,用于生成HTMLreusltimport HTMLTestRunnerclass 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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
总结以上是内存溢出为你收集整理的python使用 HTMLTestRunner.py生成测试报告全部内容,希望文章能够帮你解决python使用 HTMLTestRunner.py生成测试报告所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)