簡(jiǎn)介
上一篇我們批量執(zhí)行完用例后健田,生成的測(cè)試報(bào)告是文本形式的信轿,不夠直觀,而且報(bào)告一般都是發(fā)給leader的曹铃,所以最好是直觀一目了然缰趋,為了更好的展示測(cè)試報(bào)告,最好是生成 HTML 格式的陕见。unittest 里面是不能生成 html 格式報(bào)告的秘血,需
要導(dǎo)入一個(gè)第三方的模塊:HTMLTestRunner。
導(dǎo)入 HTMLTestRunner
1.评甜、這 個(gè) 模 塊 下 載 不 能 通 過 pip 安裝了灰粮,只能下載后手動(dòng)導(dǎo)入,下載地址:http://tungwaiyip.info/software/HTMLTestRunner.html
2蜕着、Download 下 HTMLTestRunner.py 文件就是我們需要下載的包谋竖。注意點(diǎn)擊后會(huì)進(jìn)入其源碼,可以通過另存為將其下載下來或者直接Ctrl+A加Ctrl+C承匣,Ctrl+V,推薦另存為
3蓖乘、下載后手動(dòng)拖到 python 安裝文件的 Lib 目錄下
demo 解析
1、下載 Download 下的第二個(gè)文件 test_HTMLTestRunner.py,這個(gè)就是官方給的一個(gè)測(cè)試demo 了韧骗,從這個(gè)文件可以找到該模塊的用法嘉抒。
2、找到下圖這段袍暴,就是官方給的一個(gè) demo 了些侍,test_main()里上半部分就是加載測(cè)試 case,我們不需要搞這么復(fù)雜。
3政模、最核心的代碼是下面的紅色區(qū)域岗宣,這個(gè)就是本篇的重點(diǎn)啦。
生成 html 報(bào)告
1淋样、我們只需把上面紅色區(qū)域代碼 copy 到上一篇的基礎(chǔ)上稍做修改就可以了耗式,這里主要有三個(gè)參數(shù):
--stream:測(cè)試報(bào)告寫入文件的存儲(chǔ)區(qū)域
--title:測(cè)試報(bào)告的主題
--description:測(cè)試報(bào)告的描述
2、report_path 是存放測(cè)試報(bào)告的地址
測(cè)試報(bào)告詳情
1、找到測(cè)試報(bào)告文件刊咳,用瀏覽器打開彪见,點(diǎn)開 View 里的 Detail 可以查看詳情描述。
2娱挨、為了生成帶中文描述的測(cè)試用例余指,可以在 case 中添加注釋,如在 test_01 的腳本添加如下注釋:
3跷坝、重新運(yùn)行后查看測(cè)試報(bào)告
參考代碼
1# coding=utf-8 2#1.先設(shè)置編碼酵镜,utf-8可支持中英文,如上柴钻,一般放在第一行 3 4#2.注釋:包括記錄創(chuàng)建時(shí)間笋婿,創(chuàng)建人,項(xiàng)目名稱顿颅。 5''' 6Created on2019-4-29 7@author: 北京-宏哥 8Project:學(xué)習(xí)和使用discover批量執(zhí)行測(cè)試用例 9'''10#3.導(dǎo)入unittest模塊11import unittest12import os13#4.編寫測(cè)試用例和斷言14def all_case():15? ? # 待執(zhí)行用例的目錄16#case_dir ="C:\\Users\\DELL\\PycharmProjects\\honggetest\\case"17case_dir = os.path.join(os.getcwd(),"case")18testcase = unittest.TestSuite()19discover = unittest.defaultTestLoader.discover(case_dir,20pattern="test*.py",21top_level_dir=None)22? ? # #discover方法篩選出用例,循環(huán)添加到測(cè)試套件中23#fortest_suitin discover:24#fortest_casein test_suit:25? ? #? ? ? ?? #添加用力到testcase26? ? #? ? ? ?? testcase.addTests(test_case)27? ? # print(testcase)2829? ? testcase.addTests(discover)? # 直接加載 discover? ? 可以兼容python2和330? ? print(testcase)31return testcase32if__name__ =="__main__":33? ? # 返回實(shí)例34runner = unittest.TextTestRunner()35? ? #導(dǎo)入第三方模塊HTMLTestRunner36? ? import HTMLTestRunner37? ? #保存生成報(bào)告的路徑38report_path ="C:\\Users\\DELL\\PycharmProjects\\honggetest\\report\\result.html"39fp = open(report_path,'wb')40runner = HTMLTestRunner.HTMLTestRunner(stream=fp,41title=u"這是我的自動(dòng)化測(cè)試用例",42description=u"用例執(zhí)行情況"43? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? )44? ? # run 所有用例45? ? runner.run(all_case())46? ? #關(guān)閉文件足丢,記住用open()打開文件后一定要記得關(guān)閉它粱腻,否則會(huì)占用系統(tǒng)的可打開文件句柄數(shù)。47fp.close()
小結(jié)
1斩跌、fp.close()? #關(guān)閉文件绍些。python會(huì)在一個(gè)文件不用后自動(dòng)關(guān)閉文件,不過這一功能沒有保證耀鸦,最好還是養(yǎng)成自己關(guān)閉的習(xí)慣柬批。? 如果一個(gè)文件在關(guān)閉后還對(duì)其進(jìn)行操作會(huì)產(chǎn)生ValueError
2、問題: 執(zhí)行測(cè)試用例的過程中袖订,不會(huì)打印任何東西氮帐,導(dǎo)致上個(gè)廁所或第二天回來時(shí),根本不知道執(zhí)行到哪了洛姑,或者執(zhí)行多少測(cè)試用例了上沐。
解決思路: 每次執(zhí)行一個(gè)測(cè)試用例時(shí),就打印該測(cè)試用例的名稱楞艾。
解決方案: 調(diào)用HTMLTestRunner時(shí)参咙,定義 verbosity 為大于1的整數(shù),比如說 2:
runner=HTMLTestRunner.HTMLTestRunner(fp,title="xxxx",description="xxx",verbosity=2)
在控制臺(tái)console 就可以看到每執(zhí)行一條用例硫眯,就會(huì)有如下輸出:
3蕴侧、HTMLTestRunner 腳本源碼分析與解釋
1classOutputRedirector(object) 2# 將輸出進(jìn)行重定向 3 4classTemplate_mixin(object) 5# 定義生成HTML結(jié)果文件所需要的模板。 6# 如果我們想改變HTML的格式等待两入,可以在這里進(jìn)行改動(dòng) 7 8class _TestResult(TestResult) 9# 定義繼承自 unittest.TestResult 的 類净宵。10# 這里重寫了 unittest.TestResult 的多個(gè)方法,比如 startTest(self, test) 等等1112class HTMLTestRunner(Template_mixin)13# 這里可以說是使用 HTMLTestRunner.py 的入口。定義了多個(gè)我們可以看到的方法塘娶,比如 run(self, test)1415class TestProgram(unittest.TestProgram)16# 這里繼承自 unittest.TestProgram 類归斤,重寫了 runTests 方法。17# 用于命令行執(zhí)行測(cè)試
4刁岸、缺點(diǎn):使用HTMLTestRunner的執(zhí)行測(cè)試用例的過程中脏里,如果中間中斷執(zhí)行,則已經(jīng)執(zhí)行完的用例結(jié)果也不會(huì)打印到html文件
????為了方便大家在移動(dòng)端也能看到我分享的博文虹曙,現(xiàn)已注冊(cè)個(gè)人微信公眾號(hào)迫横,掃描左下方二維碼即可,歡迎大家關(guān)注酝碳,有時(shí)間會(huì)及時(shí)分享相關(guān)技術(shù)博文矾踱。
為了方便大家互動(dòng)討論相關(guān)技術(shù)問題,現(xiàn)已組建專門的微信群疏哗,由于微信群滿100呛讲,請(qǐng)您掃描右下方宏哥個(gè)人微信二維碼拉你進(jìn)群(請(qǐng)務(wù)必備注:已關(guān)注公眾號(hào)進(jìn)群),歡迎大家加入這個(gè)大家庭返奉,我們一起暢游知識(shí)的海洋贝搁。
感謝您花時(shí)間閱讀此篇文章,如果您覺得這篇文章你學(xué)到了東西也是為了犒勞下博主的碼字不易不妨打賞一下吧,讓博主能喝上一杯咖啡芽偏,在此謝過了雷逆!
如果您覺得閱讀本文對(duì)您有幫助,請(qǐng)點(diǎn)一下左下角“推薦”按鈕污尉,您的“推薦”將是我最大的寫作動(dòng)力膀哲!另外您也可以選擇【關(guān)注我】,可以很方便找到我被碗!
本文版權(quán)歸作者和博客園共有某宪,來源網(wǎng)址:https://www.cnblogs.com/du-hong歡迎各位轉(zhuǎn)載,但是未經(jīng)作者本人同意蛮放,轉(zhuǎn)載文章之后必須在文章頁面明顯位置給出作者和原文連接缩抡,否則保留追究法律責(zé)任的權(quán)利!
作者:北京_宏哥
鏈接:http://www.reibang.com/p/6891e9b5bf91
來源:簡(jiǎn)書
著作權(quán)歸作者所有包颁。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)瞻想,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。