如何生成HTMLTestRunner報告
今天,學習瞭如何生成HTMLTestRunner測試報告。
接上篇文章,對於unittest框架,執行後,測試結果不便於檢視,同時多個case存在的時候,可能會導致case result記錄不正確的情況。
為此,引入了HTMLTestRunner.py,它是Python標準庫unittest模組的一個擴充套件。它可以生成直觀的HTML測試報告。
首先,下載HTMLTestRuner.py檔案。
源地址:http://tungwaiyip.info/software/HTMLTestRunner.html
這是針對Python2.7版本,那麼對於Python3.x的使用,需要改動幾處。同時謝謝
具體改動如下:
第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指令碼,就需要學習測試套件。
且看下回分解。