@pytest.hookimpl(hookwrapper=True) def pytest_runtest_makereport(self): # 获取到用例执行之后的result对象 out = yield """ setup: call:测试执行中 teardown: wasxfail:标记失败用例 """ report = out.get_result() # 判断call阶段 if report.when == 'call': xfail = hasattr(report, 'wasxfail') # report.skipped:用例跳过 # report.failed:用例失败 if (report.skipped and xfail) or (report.failed and not xfail): with allure.step("添加失败截图... ...."): allure.attach(self.driver.get_screenshot_as_png(), "失败截图", allure.attachment_type.PNG) 这段代码用例失败不截图
时间: 2024-02-14 08:29:34 浏览: 240
这段代码是使用pytest框架的一个钩子函数,用于在测试用例执行完成后生成测试报告。其中,通过判断测试用例的执行阶段和执行结果来决定是否需要添加失败截图。
具体来说,当测试用例执行阶段为'call'时,即测试用例执行完毕后,会获取到用例执行结果的report对象。然后判断如果测试用例被跳过且被标记为失败(xfail),或者测试用例执行失败且未被标记为xfail,则会添加一个名为"失败截图"的附件到测试报告中。
这段代码可以在测试用例执行完成后捕获失败情况,并将失败截图作为附件添加到测试报告中,便于后续分析和定位问题。
如果你想要在用例失败时不添加截图,可以将以下代码注释或删除:
```
if (report.skipped and xfail) or (report.failed and not xfail):
with allure.step("添加失败截图... ...."):
allure.attach(self.driver.get_screenshot_as_png(), "失败截图", allure.attachment_type.PNG)
```
这样,无论用例是否失败,都不会添加失败截图到测试报告中。请注意,在修改代码前最好备份一下原始代码,以防止修改后出现意外情况。
相关问题
@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` 对象的信息。
如果问题仍然存在,请提供更多代码细节以便进一步排查。
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。
阅读全文