pytest_runtest_makereport
时间: 2023-04-25 15:03:30 浏览: 306
pytest_runtest_makereport是pytest框架中的一个钩子函数,用于生成测试报告。在每个测试用例执行完成后,pytest会调用该函数,生成测试结果报告。该函数可以接收三个参数:item、call和report。其中,item表示测试用例对象,call表示测试用例执行结果,report表示测试报告对象。开发者可以在该函数中自定义测试报告的生成方式,例如将测试结果输出到文件或数据库中。
相关问题
pytest 不执行teardown_pytest文档33Hooks函数获取用例执行结果(pytest_runtest_makereport)...
对于 pytest 不执行 teardown 函数的问题,可能是因为测试用例存在异常或者中断等情况导致 pytest 遇到了错误,从而直接退出了,而没有执行后续的 teardown 函数。你可以查看 pytest 的输出日志或者控制台信息,看看是否有相关的错误提示。
至于获取用例执行结果,可以通过 pytest 的 Hooks 函数 `pytest_runtest_makereport` 来实现。这个函数会在每个测试用例执行完成后被调用,并且会传入一个 `report` 对象,包含了测试用例的执行结果信息。你可以在这个函数中处理 `report` 对象,获取相应的结果信息。具体可以参考 pytest 官方文档中的相关介绍:https://docs.pytest.org/en/latest/example/simple.html#making-test-result-information-available-in-fixtures-using-request-addfinalizer。
@pytest.hookimpl(tryfirst=True, hookwrapper=True) def pytest_runtest_makereport(item, call): outcome = yield rep = outcome.get_result() print('标识数据',rep) 失败用例没有打印rep
如果你的钩子函数中的 `print('标识数据', rep)` 没有打印出 `rep` 数据,可能是因为 `rep` 数据的类型不支持直接打印。在 Pytest 的 `pytest_runtest_makereport` 钩子函数中,`rep` 是一个 `TestReport` 类型的对象,它包含有关测试用例执行结果的信息。
要获取有关失败用例的详细信息,你可以尝试使用以下代码:
```python
import allure
import pytest
from _pytest.runner import TestReport
@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
outcome = yield
rep = outcome.get_result()
# 判断测试用例是否失败
if rep.when == "call" and rep.failed:
try:
# 获取失败用例的详细信息
if isinstance(rep, TestReport):
# 打印失败用例的节点 ID
print('节点 ID:', rep.nodeid)
# 打印失败用例的长描述
print('长描述:', rep.longreprtext)
# 打印失败用例的源码位置
print('源码位置:', rep.location)
# 打印失败用例的标签信息
print('标签:', rep.keywords)
except Exception as e:
print("获取失败用例信息失败:", e)
```
在上述示例代码中,我们使用了 `isinstance(rep, TestReport)` 来检查 `rep` 对象是否为 `TestReport` 类型,然后打印了一些可能有用的失败用例信息,如节点 ID、长描述、源码位置和标签信息。
请注意,`TestReport` 类型的对象具有许多其他属性,你可以根据需要自行查阅 Pytest 的文档(https://docs.pytest.org/en/latest/)来获取更多有关 `TestReport` 对象的信息。
如果问题仍然存在,请提供更多代码细节以便进一步排查。
阅读全文