『心善淵』Selenium3.0基礎 — 29、使用HTMLTestRunner生成unittest的HTML報告

繁華似錦Fighting發表於2021-07-15

1、HTMLTestRunner介紹

HTMLTestRunner是一個基於unittest單元測試框架生成HTML報告的第三庫。

2、HTMLTestRunner的使用

  1. 將下載好的HTMLTestRunner解壓,把HTMLTestRunner.py放入Python安裝目錄的Lib檔案下,
    如:F:\DevInstall\envs\python\python377\Lib(推薦)
    或者F:\DevInstall\envs\python\python377\Lib\site-packages都可以。
    (注:如果你有自己封裝的測試框架,也可以放在框架中,當作工具類應引入也行。)
  2. 將HTMLTestRunner模組用import匯入測試指令碼檔案中。
  3. 通過open()方法以二進位制寫模式'wb'開啟當前目錄下的測試報告.html,如果沒有,則自動建立。
  4. 呼叫HTMLTestRunner模組下的HTMLTestRunner類,引數說明如下:
    • stream:指定測試報告檔案
    • title:定義測試報告的標題
    • description:定義測試報告的副標題
    • verbosity:報告的詳細程度,只有0、1、22為最詳細。
  5. 通過HTMLTestRunner的run()方法來執行測試套件中的測試用例.

3、測試報告示例

"""
run_case.py
1.將需要執行的測試用例,新增到測試套件中
2.將用例執行結果生成HTML格式的測試報告
HTMLTestRunner.py檔案放置在python安裝目錄中的Lib目錄中
備註:
    執行結果三種:
    ok  表示用例執行通過
    F   表示用例執行失敗
    E   表示程式碼錯誤
"""
import os
import unittest
import HTMLTestRunner
import time

# 1.確定測試用例存放路徑
case_path = "./testcase"

# 2.將測試資料夾中的測試用例新增到測試套件中
discover = unittest.defaultTestLoader.discover(case_path, pattern="test*.py")

# 3.執行測試用例並生成測試報告
# 3.1 確定測試報告存放路徑
report_path = "./report"

# 3.2 確定測試報告名稱
now = time.strftime("%Y_%m_%d %H-%M-%S")
# 測試報告檔名
report_file = report_path + "/" + now + "report.html"  

# 開啟檔案並寫入資料
with open(report_file, "wb") as fp:
    # 例項化
    """
        title:報告的標題
        description:報告的描述
        stream:執行結果全部解除安裝該檔案縱
        verbosity:報告的詳細程度,0.1.2 ,2為最詳細
        retry:重試,這個功能是壞的,不能用。
    """
    runner = HTMLTestRunner.HTMLTestRunner(
        title="ECShop專案web自動化測試報告",
        description="ECShop登入功能",
        verbosity=2,
        stream=fp
    )
    runner.run(discover)

4、封裝成模組

# coding=utf-8
import time
import os
import unittest
import HTMLTestRunner

# 定位測試用例目錄(可以再封裝)
project_dir = os.path.abspath(os.path.dirname(os.path.abspath(__file__)) + '\..')
testcase_dir = project_dir + r"\testcase"


def creatsuite():
    '''獲取測試集'''
    # 搜尋測試用例
    testcases = unittest.defaultTestLoader.discover(testcase_dir, pattern="test*.py", top_level_dir=None)
    return testcases


def run(title=u'自動化測試報告', description=u'環境配置等資訊'):
    """執行測試並生成報告"""

    # 如果沒有測試報告目錄自動建立
    for filename in os.listdir(project_dir):
        if filename == "reports":
            break
    else:
        os.mkdir(project_dir + r'\reports')

    # 執行測試用例並生成測試報告
    # 1 確定測試報告存放路徑
    report_path = project_dir + r'\reports'
    print(report_path)
    # 2 確定測試報告名稱
    now = time.strftime("%Y_%m_%d_%H-%M-%S")
    report_file = report_path + "\\" + now + "report.html"  # 測試報告檔名

    # 開啟檔案並寫入
    with open(report_file, "wb") as fp:
        # 例項化
        """
            title:報告的標題
            description:報告的描述
            stream:執行結果全部解除安裝該檔案縱
            verbosity:報告的詳細程度,0.1.2 ,2為最詳細
            retry:重試,這個是壞的,不能用
        """
        runner = HTMLTestRunner.HTMLTestRunner(
            title=title,
            description=description,
            verbosity=2,
            stream=fp
        )
        runner.run(creatsuite())


if __name__ == '__main__':
    run()
    """
    封裝成目錄,如果需要生成報告的測試,
    直接呼叫該模組中的run()方法即可。

    例如:
        # 引入模組
        from util import TestRunnerReport

        # 執行測試用例
        TestRunnerReport.run(title='ewr',description='123131')

    注意:這裡只是提供一種封裝的思路,僅供參考,
        可以根據自己的情況按需封裝。
    """

相關文章