何為HTMLTestRunner
對于軟件測試來說率碾,一個清晰明了的測試報告叔营,對測試產(chǎn)出的衡量是尤為重要的。當(dāng)然所宰,如果這份報告再漂亮點會更好绒尊。HTMLTesRunner來源于Python標(biāo)準(zhǔn)庫的unittest單元測試框架的一個擴展,下載地址為HTMLTestRunner 仔粥。下載過py文件后婴谱,放入到Python的安裝目錄。比如Windows選擇放到...\Python35\Lib目錄下躯泰。
在Python3環(huán)境下使用HTMLTestRunner
目前HTMLTestRunner仍然是在Python2環(huán)境下開發(fā)的版本谭羔,所以如果想在Python3下使用的話需要做一些修改:
# Line 94
# import StringIO改為
import io
# Line 539
# self.outputBuffer = StringIO.StringIO()改為
self.outputBuffer = io.StringIO()
# Line 631
# print >>sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime)改為
print(sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime))
# Line 642
# if not rmap.has_key(cls): 改為
if not cls in rmap:
# Line 766
# uo = o.decode('latin-1') 改為
uo = o
# Line 772
# ue = e.decode('latin-1') 改為
ue = e
HTMLTestRunner的用法
我們直接編寫含有最簡單的case的例子,來看下HTMLTestRunner的用法麦向。代碼如下
from selenium import webdriver
import unittest
from HTMLTestRunner import HTMLTestRunner
class Baidu(unittest.TestCase):
"百度搜索測試"
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(10)
self.base_url = "https://www.baidu.com"
def test_baidu_search(self):
"搜索關(guān)鍵字"
driver = self.driver
driver.get(self.base_url)
driver.find_element_by_id("kw").send_keys("Selenium3")
driver.find_element_by_id("su").click()
def tearDown(self):
self.driver.quit()
testunit = unittest.TestSuite()
testunit.addTest(Baidu("test_baidu_search"))
fp = open('./result.html', 'wb')
runner = HTMLTestRunner(stream=fp, title='測試報告', description='測試執(zhí)行情況')
runner.run(testunit)
fp.close()
這里采用Python的單元測試框架編寫測試用例口糕,setUp和tearDown可以簡單理解為測試的準(zhǔn)備和回收,而test_baidu_search為一個測試用例磕蛇。測試報告通過stream寫入fp,也就是result.html文件中十办。運行程序秀撇,我們可以在當(dāng)前目錄得到一個測試報告。
可以清楚的看到測試的執(zhí)行情況向族。如果測試用例測試失敗會是一種什么情況呢呵燕?我們在腳本中插入以下代碼,
js = 'document.getElementById("su").style.visibility = "hidden";'
driver.execute_script(js)
這是用Python調(diào)用Javascript腳本件相,將百度的搜索按鈕隱藏再扭。顯然,測試結(jié)果將為Fail夜矗,我們打開測試報告:
可以看到泛范,測試報告清晰的列出失敗的case。
但一個好的測試報告不僅要能體現(xiàn)測試的整體結(jié)果紊撕,更要有強大的可讀性罢荡。我們打開error,只有被標(biāo)記的信息才是我們想要定位error的有效信息:即元素不可見
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible
所以对扶,官方的HTMLTestRunner有著極大的局限性区赵。對于一個測試人員來說,自動化腳本本來就是一個用來節(jié)省人力和時間的工具浪南,如果再花大量的時間來troubleshooting笼才,顯示是得不償失的。所以我對我的測試報告的要求是络凿,可以生成測試用例的執(zhí)行結(jié)果骡送,也可以定位問題昂羡。我希望可以在用例執(zhí)行出錯的時候截圖,可以每個關(guān)鍵操作都用log來track各谚。篇幅有限紧憾,決定先挖個坑,下一次講一下我的Github的第一個項目:為HTMLTestRunner增加log和截圖功能昌渤。