Pytest:测试运行后如何显示生成的报告?

问题描述 投票:0回答:4

我将 pytest 与 pytest-html 插件结合使用,该插件在测试运行后生成 HTML 报告。

我正在使用自动连线会话装置自动在浏览器中打开生成的 HTML 报告:

@pytest.fixture(scope="session", autouse=True)
def session_wrapper(request):
    print('Session wrapper init...')
    yield

    # open report in browser on Mac or Windows, skip headless boxes
    if platform.system() in ['Darwin', 'Windows']:
        html_report_path = os.path.join(request.config.invocation_dir.strpath, request.config.option.htmlpath)
        open_url_in_browser("file://%s" %html_report_path)

上面的代码可以工作,但不一致,因为有时浏览器会在创建文件之前尝试加载文件,这会导致文件未找到错误,并且需要手动刷新浏览器才能显示报告。

我的理解是

scope="session"
是最广泛的可用范围,我的假设是 pytest-html 应该在会话结束之前完成生成报告,但显然情况并非如此。

问题是:挂钩浏览器报告自动启动代码的正确方法是什么?难道

pytest-html
也挂接到了会话终结器作用域中吗?在这种情况下,如何确保 HTML 文件仅在创建文件后才能在浏览器中打开?

python report pytest pytest-html
4个回答
3
投票

在你的

conftest.py

import pytest

@pytest.hookimpl(trylast=True)
def pytest_configure(config):
    config._htmlfile = config._html.logfile


@pytest.hookimpl(trylast=True)
def pytest_sessionfinish(session, exitstatus):
    file = session.config._htmlfile
    # invoke the file opening in external tool
    os.system('open ' + file)

备注:

  • pytest-html
    pytest_sessionfinish
    钩子中写入报告,因此您将需要一个自定义的 sessionfinish 钩子。用
    trylast=True
    标记它,以确保您的钩子实现在
    pytest-html
    之后运行。
  • config.option.htmlpath
    是通过
    --html-path
    命令行参数传递的内容;
    config._html.logfile
    pytest-html
    实际用作文件名的内容。
    pytest-html
    的configure hook完成后就可以访问了,所以我又使用了一次
    trylast=True

2
投票

正如 massimo 所暗示的那样,一个可能的解决方案是使用 hook,特别是

pytest_unconfigure
,它可以放置在
conftest.py
中,以便它可用于所有测试。

def pytest_unconfigure(config):
    if platform.system() in ['Darwin', 'Windows']:
        html_report_path = os.path.join(config.invocation_dir.strpath, config.option.htmlpath)
        open_url_in_browser("file://%s" % html_report_path)

1
投票

您可以尝试使用hooks代替使用固定装置。

过去我和他们一起做了一些有趣的事情,不幸的是我不记得在运行的最后是否有电话,但可能是的


0
投票

您可以链接控制台命令来运行测试并打开报告。

我不确定你会如何使用默认报告器来做到这一点,但是使用 Allure Report,bat 文件将如下所示:

set SCRIPT_DIR=%~dp0
set SCRIPT_DIR=%SCRIPT_DIR:~0,-1%

pytest --alluredir "%SCRIPT_DIR%\allure-results" && allure serve "%SCRIPT_DIR%\allure-results"

第二个命令仅在第一个命令执行后运行,因此不会出现不确定性问题。作为奖励,您将获得一份漂亮且详细的报告。

您必须安装 Allure,然后将 PyTest 集成添加到您的项目中

© www.soinside.com 2019 - 2024. All rights reserved.