Pytest-allure如何在测试完成后自动生成完整报告?

一、完整步骤

常规allure报告的生成方法是在pytest全部用例执行完成后,手动在命令行执行如

 allure generate ./temps -o ./report --clean

Pytest-allure如何在测试完成后自动生成完整报告?

每次用例执行完成后都要重复如此的操作,十分繁琐。

可以使用如下方式让用例执行完成后自动生成报告到当前目录下:

1、首先在pytest.ini里面配置。(如没有则在根目录下创建)

[pytest]
addopts = -vs --alluredir=./temps --clean-alluredir

2、其次在conftest.py里面新增如下代码。(如没有则在根目录下创建)

import os

def pytest_sessionfinish(session, exitstatus):
    os.system("allure generate ./temps -o ./report --clean")

则可以在用例执行完成后自动生成报告。

二、代码讲解

1、ini配置文件

[pytest]
addopts = -vs --alluredir=./temps --clean-alluredir

-v
作用: 增加详细输出。
说明: 使 pytest 输出更详细的测试结果,包括每个测试用例的状态和输出信息。
-s
作用: 允许打印到控制台。
说明: 禁止 pytest 捕获标准输出和标准错误输出,允许测试脚本中的 print 语句正常输出到控制台。
--alluredir=./temps
作用: 指定生成 Allure 测试结果文件的目录。
说明: 将测试结果保存到指定目录(这里是 ./temps),以便后续生成 Allure 报告。
--clean-alluredir
作用: 清空指定的 Allure 结果目录。
说明: 在生成新的测试结果之前,清空指定的目录(这里是 ./temps),避免旧的结果文件干扰新结果。

2、conftest.py

import os

def pytest_sessionfinish(session, exitstatus):
    os.system("allure generate ./temps -o ./report --clean")

定义一个 pytest 的 hook 函数 pytest_sessionfinish

执行 Allure 报告生成命令:os.system("allure generate ./temps -o ./report --clean")

三、踩坑

之前直接在fixture中编写os代码,期望能够在用例执行完成后生成报告,但受到pytest框架的影响,会导致用例缺失(我有十个用例,在fixture里面执行完后只有9个用例的报告)

@pytest.fixture(scope="session", autouse=True)
def generate_allure_report(request):
    yield
    os.system("allure generate ./temps -o ./report --clean")

版权声明:如无特殊标注,文章均来自网络,本站编辑整理,转载时请以链接形式注明文章出处,请自行分辨。

本文链接:https://www.shbk5.com/dnsj/73080.html