fixture 中使用 os.system(f"allure generate {result_path} -o {report_path} --clean") 生成报告会漏掉最后一条用例

问题描述:

  • 环境:win10 + python 3.8 + pytest 6.2.5 + allure 2.9.45
  • 问题复述:
    在学习 fixture 的时候,我在 conftest 里定义了一个 session 级别的 fixture,通过 os.system(f"allure generate {result_path} -o {report_path} --clean") 语句自动生成 allure 报告。
    但是在实际运行的时候发现:通过该方法生成的 report 中,会漏掉最后一条被执行的用例,而当我手动执行相同的 allure 命令时却可以统计到完整数量的用例。

请问是什么原因导致的(* ̄(エ) ̄)

以下截图为使用同一份 result ,两次生成 report 的结果。
异常场景下截图(通过 fixture 执行 allure generate ../result -o ../report --clean 命令):

正常场景下截图(通过控制台 执行 allure generate ../result -o ../report --clean 命令):

相关代码(包括log文件,都要使用markdown代码格式,)

@pytest.fixture(scope="session", autouse=True)
def to_report():
    yield
    result_path = r"../result"
    report_path = r"../report"
    logging.debug("【开始生成测试报告】")
    os.system(f"allure generate {result_path} -o {report_path} --clean")
    logging.debug("【测试报告生成成功】")

补充信息:在上面通过 fixture 自动生成报告的前提下,当我使用分布式执行用例时发现:同时使用了几个核,最终生成的 report 就会少几条用例。

原因以及解决方式(没有可以写无):

原因:未知

解决办法:

办法一:将该代码块中的语句放到 pytest_sessionfinish;pytest_terminal_summary 这两个hook中
办法二:使用jenkins的allure插件生成报告
办法三:通过批处理脚本等方式执行报告生成命令

我还是没理解正常场景下和异常场景下操作的区别…
麻烦详细补充下~

老师,我补充了描述和截图,不知道有没有表达清楚。
异常场景操作:通过 fixture 执行 allure generate ../result -o ../report --clean
正常场景操作:通过 控制台 执行 allure generate ../result -o ../report --clean
两次生成 report 使用的是同一份 result。

给一下源码,或者能复现问题的同类型的代码哈

这个是我gitee的地址,源码在上面:
https://gitee.com/hkkk_1_0/ck22_mhk.git