【環境信息】
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()