如何自定义使用py.test生成的html报告文件?

时间:2016-09-20 08:41:51

标签: python html pytest

我正在尝试使用pytest自定义html报告。 例如,如果我有一个目录结构,如:

tests
    temp1
         test_temp1.py
    conftest.py

conftest.py文件也位于tests目录中,它应该与tests目录中的所有子目录相同。 我可以在conftest.py中使用哪些fixture和hookwrappers来更改使用以下命令生成的html文件的内容:

  

py.test tests / temp1 / test_temp1.py --html = report.html

2 个答案:

答案 0 :(得分:3)

看起来你正在使用像pytest-html这样的插件。 如果是这种情况的检查文档检查所有钩子的提供文件。

为pytest-html提供了以下钩子 您可以通过修改夹具中的request.config._html.environment来添加更改报告的“环境”部分:

@pytest.fixture(autouse=True)
def _environment(request):
    request.config._environment.append(('foo', 'bar'))

您可以通过在报表对象上创建“额外”列表来向HTML报表添加详细信息。以下示例使用pytest_runtest_makereport挂钩添加各种类型的附加内容,可以在插件或conftest.py文件中实现:

import pytest
@pytest.mark.hookwrapper
def pytest_runtest_makereport(item, call):
    pytest_html = item.config.pluginmanager.getplugin('html')
    outcome = yield
    report = outcome.get_result()
    extra = getattr(report, 'extra', [])
    if report.when == 'call':
        # always add url to report
        extra.append(pytest_html.extras.url('http://www.example.com/'))
        xfail = hasattr(report, 'wasxfail')
        if (report.skipped and xfail) or (report.failed and not xfail):
            # only add additional html on failure
            extra.append(pytest_html.extras.html('<div>Additional HTML</div>'))
        report.extra = extra

答案 1 :(得分:2)

更新:在最新版本中,如果您想修改html报告中的环境表,请添加到conftest.py下一个代码:

@pytest.fixture(scope='session', autouse=True)
def configure_html_report_env(request)
    request.config._metadata.update(
        {'foo': 'bar'}
    )