【环境信息】
Python3.6+selenium3.0.2+HtmlTestRunner0.8+Firefox50+Win7
【问题描述】
1.HtmlTestrunner是unittest的一个扩展,目前在网上下载的版本是0.8,由于和Python3存在不兼容的地方,所以运行时会报错或报告为空。
【解决方案】
1.参考博客:http://blog.csdn.net/liujingqiu/article/details/50518776
根据该博客的描述,修改HtmlTestrunner.py文件后再运行脚本。
博客正文粘贴如下(博客为转载:http://blog.csdn.net/liujingqiu/article/details/50518776)
首先,下载HTMLTestRuner.py文件。
源地址:http://tungwaiyip.info/software/HTMLTestRunner.html 这是针对Python2.7版本,那么对于Python3.x的使用,需要改动几处。
同时谢谢 http://www.bubuko.com/infodetail-529431.html的分享。
具体改动如下:
第94行,将import StringIO修改成import io
第539行,将self.outputBuffer = StringIO.StringIO()修改成self.outputBuffer= io.StringIO()
第631行,将print >> sys.stderr, ‘\nTime Elapsed: %s‘ %(self.stopTime-self.startTime)修改成print(sys.stderr, ‘\nTimeElapsed: %s‘ % (self.stopTime-self.startTime))
第642行,将if not rmap.has_key(cls):修改成if not cls in rmap:
第766行,将uo = o.decode(‘latin-1‘)修改成uo = e
第775行,将ue = e.decode(‘latin-1‘)修改成ue = e
第778行,将output = saxutils.escape(uo+ue),修改成output = saxutils.escape(str(uo)+str(ue)),
将上述几处改动,保存成功后,再将HTMLTestRunner.py放到C:\Python34\Lib目录中,检验是否加载成功,在Python IDLE 中输入 import HTMLTestRunner 若无报错,那么加载成功。
【参考案例】
1.登录百度云
2.进入“立即注册百度账号”网页
3.进入”会员中心”网页
4.生成测试报告的文件名为:2015-01-02result.html。
1 #coding=utf-8 #防止中文乱码 2 from selenium import webdriver 3 from selenium.webdriver.common.by import By 4 #加载键盘使用的模块 5 from selenium.webdriver.common.keys import Keys 6 from selenium.webdriver.support.ui import Select 7 from selenium.common.exceptions import NoSuchElementException 8 9 #加载unittest模块 10 import unittest 11 import time 12 import re 13 #加载HTMLTestRunner,用于生成HTMLreuslt 14 import HTMLTestRunner 15 16 class BaiduYun(unittest.TestCase): 17 def setUp(self): 18 self.browser=webdriver.Chrome() 19 self.browser.implicitly_wait(30) 20 self.base_url="http://yun.baidu.com" 21 self.verficationErrors=[] 22 self.accept_next_alert=True 23 def Login(self): 24 browser=self.browser 25 browser.get(self.base_url+'/') 26 u"""百度云登录""" 27 browser.find_element_by_name("userName").clear() 28 username=browser.find_element_by_name("userName") 29 username.send_keys("alu***") 30 username.send_keys(Keys.TAB) 31 time.sleep(2) 32 password=browser.find_element_by_name("password") 33 password.send_keys("***") 34 password.send_keys(Keys.ENTER) 35 time.sleep(3) 36 browser.close() 37 def Register(self): 38 browser=self.browser 39 browser.get(self.base_url+'/') 40 u"""立即注册百度账号""" 41 browser.find_element_by_class_name("link-create").click() 42 time.sleep(2) 43 browser.close() 44 def Link(self): 45 browser=self.browser 46 browser.get(self.base_url+'/') 47 u"""会员中心""" 48 browser.find_element_by_link_text("会员中心").click() 49 time.sleep(2) 50 browser.close() 51 def tearDown(self): 52 self.browser.quit() 53 self.assertEqual([],self.verficationErrors) 54 if __name__=="__main__": 55 #unittest.main() 56 testunit=unittest.TestSuite() 57 #将测试用例加入到测试容器中 58 testunit.addTest(BaiduYun("Login")) 59 testunit.addTest(BaiduYun("Register")) 60 testunit.addTest(BaiduYun("Link")) 61 #获取当前时间,这样便于下面的使用。 62 now = time.strftime("%Y-%m-%M-%H_%M_%S",time.localtime(time.time())) 63 #打开一个文件,将result写入此file中 64 fp=open("result"+now+".html",'wb') 65 runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title='test result',description=u'result:') 66 runner.run(testunit) 67 fp.close()