簡介
上一篇我們批量執行完用例后,生成的測試報告是文本形式的,不夠直觀,而且報告一般都是發給leader的,所以最好是直觀一目了然,為了更好的展示測試報告,最好是生成 HTML 格式的。unittest 里面是不能生成 html 格式報告的,需
要導入一個第三方的模塊:HTMLTestRunner。
導入 HTMLTestRunner
1.、這 個 模 塊 下 載 不 能 通 過 pip 安裝了,只能下載后手動導入,下載地址:http://tungwaiyip.info/software/HTMLTestRunner.html
2、Download 下 HTMLTestRunner.py 文件就是我們需要下載的包。注意點擊后會進入其源碼,可以通過另存為將其下載下來或者直接Ctrl+A加Ctrl+C,Ctrl+V,推薦另存為
3、下載后手動拖到 python 安裝文件的 Lib 目錄下
demo 解析
1、下載 Download 下的第二個文件 test_HTMLTestRunner.py,這個就是官方給的一個測試demo 了,從這個文件可以找到該模塊的用法。
2、找到下圖這段,就是官方給的一個 demo 了,test_main()里上半部分就是加載測試 case,我們不需要搞這么復雜。
3、最核心的代碼是下面的紅色區域,這個就是本篇的重點啦。
生成 html 報告
1、我們只需把上面紅色區域代碼 copy 到上一篇的基礎上稍做修改就可以了,這里主要有三個參數:
--stream:測試報告寫入文件的存儲區域
--title:測試報告的主題
--description:測試報告的描述
2、report_path 是存放測試報告的地址
測試報告詳情
1、找到測試報告文件,用瀏覽器打開,點開 View 里的 Detail 可以查看詳情描述。
2、為了生成帶中文描述的測試用例,可以在 case 中添加注釋,如在 test_01 的腳本添加如下注釋:
3、重新運行后查看測試報告
參考代碼
1 # coding=utf-8 2 #1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行 3 4 #2.注釋:包括記錄創建時間,創建人,項目名稱。 5 ''' 6 Created on 2019-4-29 7 @author: 北京-宏哥 8 Project:學習和使用discover批量執行測試用例 9 ''' 10 #3.導入unittest模塊 11 import unittest 12 import os 13 #4.編寫測試用例和斷言 14 def all_case(): 15 # 待執行用例的目錄 16 #case_dir = "C:\\Users\\DELL\\PycharmProjects\\honggetest\\case" 17 case_dir = os.path.join(os.getcwd(), "case") 18 testcase = unittest.TestSuite() 19 discover = unittest.defaultTestLoader.discover(case_dir, 20 pattern="test*.py", 21 top_level_dir=None) 22 # #discover方法篩選出用例,循環添加到測試套件中 23 # for test_suit in discover: 24 # for test_case in test_suit: 25 # #添加用力到testcase 26 # testcase.addTests(test_case) 27 # print(testcase) 28 29 testcase.addTests(discover) # 直接加載 discover 可以兼容python2和3 30 print(testcase) 31 return testcase 32 if __name__ == "__main__": 33 # 返回實例 34 runner = unittest.TextTestRunner() 35 #導入第三方模塊HTMLTestRunner 36 import HTMLTestRunner 37 #保存生成報告的路徑 38 report_path = "C:\\Users\\DELL\\PycharmProjects\\honggetest\\report\\result.html" 39 fp = open(report_path,'wb') 40 runner = HTMLTestRunner.HTMLTestRunner(stream=fp, 41 title=u"這是我的自動化測試用例", 42 description=u"用例執行情況" 43 ) 44 # run 所有用例 45 runner.run(all_case()) 46 #關閉文件,記住用open()打開文件后一定要記得關閉它,否則會占用系統的可打開文件句柄數。 47 fp.close()
小結
1、fp.close() #關閉文件。python會在一個文件不用后自動關閉文件,不過這一功能沒有保證,最好還是養成自己關閉的習慣。 如果一個文件在關閉后還對其進行操作會產生ValueError
2、問題: 執行測試用例的過程中,不會打印任何東西,導致上個廁所或第二天回來時,根本不知道執行到哪了,或者執行多少測試用例了。
解決思路: 每次執行一個測試用例時,就打印該測試用例的名稱。
解決方案: 調用HTMLTestRunner時,定義 verbosity 為大於1的整數,比如說 2:
runner=HTMLTestRunner.HTMLTestRunner(fp,title="xxxx",description="xxx",verbosity=2)
在控制台console 就可以看到每執行一條用例,就會有如下輸出:
3、HTMLTestRunner 腳本源碼分析與解釋
1 class OutputRedirector(object) 2 # 將輸出進行重定向 3 4 class Template_mixin(object) 5 # 定義生成HTML結果文件所需要的模板。 6 # 如果我們想改變HTML的格式等待,可以在這里進行改動 7 8 class _TestResult(TestResult) 9 # 定義繼承自 unittest.TestResult 的 類。 10 # 這里重寫了 unittest.TestResult 的多個方法,比如 startTest(self, test) 等等 11 12 class HTMLTestRunner(Template_mixin) 13 # 這里可以說是使用 HTMLTestRunner.py 的入口。定義了多個我們可以看到的方法,比如 run(self, test) 14 15 class TestProgram(unittest.TestProgram) 16 # 這里繼承自 unittest.TestProgram 類,重寫了 runTests 方法。 17 # 用於命令行執行測試
4、缺點:使用HTMLTestRunner的執行測試用例的過程中,如果中間中斷執行,則已經執行完的用例結果也不會打印到html文件