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

簡介

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#hooks

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

推薦閱讀: