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其它相關文章!
推薦閱讀:
- python單測框架之pytest常見用法
- pytest中配置文件pytest.ini使用
- Python測試框架pytest高階用法全面詳解
- python單元測試之pytest的使用
- pytest基本用法簡介