1. 程式人生 > >python介面自動化(二十七)--html 測試報告——上(詳解)

python介面自動化(二十七)--html 測試報告——上(詳解)

簡介

  上一篇我們批量執行完用例後,生成的測試報告是文字形式的,不夠直觀,而且報告一般都是發給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