Pytest-html 自定义报告
Pytest-html custom report
我正在使用 pytest 运行 我的测试,并使用 pytest html 生成报告。
我正在尝试在报告失败或跳过的情况下显示 error\skip 消息,使用值形式 call.excinfo.value
。
我注意到 pytest_runtest_makereport
被多次调用,对于 setup
、call
和 teardown
,并且因为 call.excinfo.value
在 setup
和 [=16 中=] 为空,它正在覆盖单元格中的消息,结果 error message
单元格为空。
所以,我尝试使用以下条件更新值 report.when == "call"
,
但是当 pytest_html_results_table_row
在 setup
和 teardown
上执行时我收到以下错误:
AttributeError: 'TestReport' object has no attribute 'error_message'
这是我试过的代码:
# in conftest.py
@pytest.mark.optionalhook
def pytest_html_results_table_header(cells):
cells.insert(1, html.th('Error Message'))
@pytest.mark.optionalhook
def pytest_html_results_table_row(report, cells):
cells.insert(1, html.td(report.error_message))
@pytest.mark.hookwrapper
def pytest_runtest_makereport(item, call):
outcome = yield
report = outcome.get_result()
if report.when == "call" and report.skipped or report.failed:
report.error_message = str(call.excinfo.value) if call.excinfo else ""
是否有另一种方法可以在 failure\skipped 的报告中显示错误消息。
p.s:对于通过的测试,该值应为空字符串
这是我期望实现的目标:
expected report
我找到了解决这个问题的方法,希望对以后的人有所帮助。
这是解决 teardown
覆盖在 call
阶段设置的值的问题的解决方法。
基本上,在 teardown
阶段之后,我用 call
阶段设置的值覆盖 error_message
中的值。
注意:请考虑到这只会显示来自 call
阶段
的错误消息
@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport(item, call):
outcome = yield
report = outcome.get_result()
report.error_message = ""
# set a report attribute for each phase of a call, which can be "setup", "call", "teardown"
setattr(item, "rep_" + report.when, report)
report.error_message = str(call.excinfo.value) if call.excinfo else ""
if report.when == "teardown":
# retrieving the error messages from the call phase
report.error_message = item.rep_call.error_message
见附图report
我正在使用 pytest 运行 我的测试,并使用 pytest html 生成报告。
我正在尝试在报告失败或跳过的情况下显示 error\skip 消息,使用值形式 call.excinfo.value
。
我注意到 pytest_runtest_makereport
被多次调用,对于 setup
、call
和 teardown
,并且因为 call.excinfo.value
在 setup
和 [=16 中=] 为空,它正在覆盖单元格中的消息,结果 error message
单元格为空。
所以,我尝试使用以下条件更新值 report.when == "call"
,
但是当 pytest_html_results_table_row
在 setup
和 teardown
上执行时我收到以下错误:
AttributeError: 'TestReport' object has no attribute 'error_message'
这是我试过的代码:
# in conftest.py
@pytest.mark.optionalhook
def pytest_html_results_table_header(cells):
cells.insert(1, html.th('Error Message'))
@pytest.mark.optionalhook
def pytest_html_results_table_row(report, cells):
cells.insert(1, html.td(report.error_message))
@pytest.mark.hookwrapper
def pytest_runtest_makereport(item, call):
outcome = yield
report = outcome.get_result()
if report.when == "call" and report.skipped or report.failed:
report.error_message = str(call.excinfo.value) if call.excinfo else ""
是否有另一种方法可以在 failure\skipped 的报告中显示错误消息。
p.s:对于通过的测试,该值应为空字符串
这是我期望实现的目标: expected report
我找到了解决这个问题的方法,希望对以后的人有所帮助。
这是解决 teardown
覆盖在 call
阶段设置的值的问题的解决方法。
基本上,在 teardown
阶段之后,我用 call
阶段设置的值覆盖 error_message
中的值。
注意:请考虑到这只会显示来自 call
阶段
@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport(item, call):
outcome = yield
report = outcome.get_result()
report.error_message = ""
# set a report attribute for each phase of a call, which can be "setup", "call", "teardown"
setattr(item, "rep_" + report.when, report)
report.error_message = str(call.excinfo.value) if call.excinfo else ""
if report.when == "teardown":
# retrieving the error messages from the call phase
report.error_message = item.rep_call.error_message
见附图report