我正在调试间歇性测试失败.为此,我想在测试失败时转储大量调试信息.转储调试的过程非常缓慢,产生大量数据,所以我不想为每个测试都这样做.
我正在使用pytest和yield autouse fixture应该工作得很好
@pytest.yield_fixture(scope="function", autouse=True)
def dump_on_failue(request):
prepare_debug_dump()
yield
if test_failed(request):
debug_dump()
Run Code Online (Sandbox Code Playgroud)
问题是我无法弄清楚如何检测测试是否失败.在pytest网站上已经有一些问题甚至是注意事项:
if request.node.rep_setup.failed:
print ("setting up a test failed!", request.node.nodeid)
elif request.node.rep_setup.passed:
if request.node.rep_call.failed:
print ("executing test failed", request.node.nodeid)
Run Code Online (Sandbox Code Playgroud)
不幸的是,此代码不再起作用.节点对象中没有rep_setup和rep_calls符号.我试图挖掘请求和节点对象,但没有运气.
谁知道如何检测测试是否失败?
节点对象中没有rep_setup和rep_calls符号。
No.rep_setup 和rep_calls 符号仍然存在。
将此代码添加到您的 root 中conftest.py。它将检查每个测试功能的通过/失败。
import pytest
@pytest.mark.tryfirst
def pytest_runtest_makereport(item, call, __multicall__):
rep = __multicall__.execute()
setattr(item, "rep_" + rep.when, rep)
return rep
@pytest.fixture(scope='function', autouse=True)
def test_debug_log(request):
def test_result():
if request.node.rep_setup.failed:
print ("setting up a test failed!", request.node.nodeid)
elif request.node.rep_setup.passed:
if request.node.rep_call.failed:
print ("executing test failed", request.node.nodeid)
request.addfinalizer(test_result)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
759 次 |
| 最近记录: |