首頁 > 軟體

pytest生成簡單自定義測試結果的html報告

2022-06-09 22:01:21

簡介

pytest-HTML 是一個外掛,pytest 用於生成測試結果的 HTML 報告。

生成報告

先簡單寫個例子生成報告看看。

生成報告效果如下

此次主要是針對 Environment 和 Results 兩部分進行修改設定,讓列表部分展示的資料更清晰,增加和刪減列資料。

修改報告

這裡先介紹下 conftest.py 檔案,主要作用如下:

  • 1 .存放你的 fixture 函數
  • 2.在裡面寫自己的本地外掛

比如公共用例前置和後置部分,資料清理都可以放在該檔案裡執行。

修改 Environment

主要分為增加設定或刪除設定:

def pytest_configure(config):
    # 新增設定
    config._metadata["專案名稱"] = "測試報告"
    # 刪除設定
    config._metadata.pop("JAVA_HOME")
    config._metadata.pop("Plugins")
    config._metadata.pop("Packages")
    config._metadata.pop("Platform")

修改 Results

從上面生成的報告列表中,看到主要分為下面幾列資料:Result、Test、Links、Duration。這裡面的資料其實可以看出都沒有包含我們的測試資料,無法直觀看出輸入、輸出結果。
做如下優化:

  • 1.刪除 Test、Links 列
  • 2.增加幾列分別展示引數化中的內容,如用例編號、輸入、輸出
  • 3.修改用例執行結果 show details 中內容,自定義展示內容

基於上述需求,要在報告中新增我們自己的測試資料展示,故需要新增一個全域性變數在一個 case 執行過程中進行記錄供呼叫。

建立全域性變數:

# 定義一個全域性變數,用於儲存內容
global_data = {}
@pytest.fixture(scope="function")
def set_global_data():
    """
    設定全域性變數,用於關聯引數
    :return:
    """
    def _set_global_data(key, value):
        global_data[key] = value
    yield _set_global_data
    global_data.clear()

修改我們的用例函數,將測試資料加入到全域性變數中。

@user2ize("data", case_list)
def test_case(data, set_global_data):
    set_global_data("id", data.get("id"))
    set_global_data("method", data.get("method"))
    set_global_data("case_input", data.get("case_input"))
    set_global_data("case_output", data.get("case_output"))
    try:
        assert data.get("case_input") == data.get("case_output")
    except AssertionError:
        set_global_data("error_step", "斷言失敗")
        raise

conftest.py 檔案中增加和刪除列。

@user3hook
def pytest_html_results_table_header(cells):
    """ 更改表頭資訊
    :param cells:
    :return:
    """
    cells.insert(1, html.th('用例ID', class_="sortable", col="id"))
    cells.insert(2, html.th('方法', class_="sortable", col="method"))
    cells.insert(3, html.th('輸入', class_="sortable", col="case_input"))
    cells.insert(4, html.th('輸出', class_="sortable", col="case_output"))
    cells.pop(-1)  # 刪除link
    cells.pop(-2)  # 刪除Test
@user4hook
def pytest_html_results_table_row(cells):
    """更改表中資料資訊"""
    cells.insert(1, html.td(global_data.get("id")))
    cells.insert(2, html.td(global_data.get("method")))
    cells.insert(3, html.td(global_data.get("case_input")))
    cells.insert(4, html.td(global_data.get("case_output")))
    cells.pop(-1)  # 刪除link
    cells.pop(-2)  # 刪除Test

conftest.py 檔案中修改執行結果 show details 內容。

@user5hook
def pytest_html_results_table_html(report, data):
    if report.failed:
        del data[:]
        data.append(html.span(f"失敗步驟:{global_data.get('error_step')}n輸出結果:{global_data.get('case_output')}",
                              class_='fail log'))
    elif report.passed:
        del data[:]
        data.append(html.div(f"輸出結果:{global_data.get('case_output')}", class_='success log'))

生成效果報告

可以看到現在生成的報告內容就可以清晰看到測試資料,和我們的用例資料關聯上了。

後記

當前只是簡單的對報告展示的資料進行了更改,感興趣可以檢視官方檔案學習

https://docs.pytest.org/en/latest/reference/reference.html

以上就是pytest生成簡單自定義測試結果html報告的詳細內容,更多關於pytest生成自定義測試html的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com