检测夹具内的测试是否失败

Ole*_*nko 7 testing pytest

我正在调试间歇性测试失败.为此,我想在测试失败时转储大量调试信息.转储调试的过程非常缓慢,产生大量数据,所以我不想为每个测试都这样做.

我正在使用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符号.我试图挖掘请求和节点对象,但没有运气.

谁知道如何检测测试是否失败?

Cha*_*rat 1

节点对象中没有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)