如何将一些生成的测试标记为xfail/skip?

2024-09-30 14:16:16 发布

您现在位置:Python中文网/ 问答频道 /正文

与py.测试我经常生成一些测试用例可能失败的测试。如何将它们标记为xfail?如果我把@py.test.mark.xfail放在测试函数上,这意味着它的所有实例都是xfail。如果我在测试中py.test.xfail()它实际上没有通过测试,而不仅仅是将其标记为xfail。我能用metafunc添加这个标记吗?在

例如

# code - function with a bug :)

def evenHigherThanSquare(n):
    return n**2


# test file

def pytest_generate_tests(metafunc):
    data = [
        (2, 4),
        (3, 10), # should be xfail
        (4, 16),
        (5, 26), # should be xfail
        ]
    for input, expected in data:
        if metafunc.function is test_evenHigherThanSquare:
            metafunc.addcall(funcargs=dict(input=input, expected=expected))


def test_evenHigherThanSquare(input, expected):
    assert evenHigherThanSquare(input) == expected

Tags: py标记testinputdatadef测试用例function
1条回答
网友
1楼 · 发布于 2024-09-30 14:16:16

当然,您可以使用funcarg factoryapply an xfail marker(since 1.3.2)

def pytest_generate_tests(metafunc):
    data = [
        # input # output # is expected to fail?
        (2, 4, False),
        (3, 10, True),
        (4, 16, False),
        (5, 26, True),
        ]
    for input, expected, xfail in data:
        if metafunc.function is test_evenHigherThanSquare:
            metafunc.addcall(funcargs=dict(input=input, expected=expected),
                             param=xfail)


def pytest_funcarg__xfail(request):
    if request.param:
        request.applymarker(py.test.mark.xfail)


def test_evenHigherThanSquare(input, expected, xfail):
    assert evenHigherThanSquare(input) == expected

这里我们使用未使用的xfail参数test_evenHigherThanSquare来触发对每个测试项的pytest_funcarg__xfail的调用;它使用提供给metafunc.addcallparam来决定是否完成测试。在

Funcarg工厂更常用于生成在收集时创建成本高昂的参数,但应用标记也是一种完全受支持的用法。在

相关问题 更多 >

    热门问题