1. 程式人生 > >如何生成HTMLTestRunner報告

如何生成HTMLTestRunner報告

今天,學習瞭如何生成HTMLTestRunner測試報告。
接上篇文章,對於unittest框架,執行後,測試結果不便於檢視,同時多個case存在的時候,可能會導致case result記錄不正確的情況。
為此,引入了HTMLTestRunner.py,它是Python標準庫unittest模組的一個擴充套件。它可以生成直觀的HTML測試報告。
首先,下載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 notcls 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。

測試指令碼:

#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
在Python3.4中,可以得到:
這裡寫圖片描述

在C:\Python34\目錄下,有檔案
這裡寫圖片描述
開啟後,如圖所示:
這裡寫圖片描述
這樣看更直觀。
同時,如果出現錯誤的case,也就只會顯示fail的case(另外的test case的結果),對於pass的case,依舊顯示pass,如圖所示:
這裡寫圖片描述

分析:
1.對於fp=file(filename,”wb”)在Python3.x中file已經不再使用了,需要使用的是fp=open(filename,”wb”)
同時一定要記得close fp即fp.close()
2.為了設定result file的name更直觀,需要獲取當前時間,以做分辨。
now=time.strftime(“%Y-%m-%M-%H_%M_%S”,time.localtime(time.time()))

那麼,問題來了,雖然,生成的result倒是直觀了,但是對於一個腳本里有多個case,這樣對於指令碼的維護以及使用,依舊不方便,這就需要考慮到整合case指令碼,就需要學習測試套件。
且看下回分解。