在pytest中,如何缩小失败标记的范围?

时间:2012-07-24 20:34:25

标签: pytest

我想缩小pytest xfail标记的范围。正如我目前使用它,它标志着整个测试功能,并且功能中的任何故障都很酷。

我想将其缩小到较小的范围,可能使用类似于“with pytest.raises(module.Error)”的上下文管理器。例如:

@pytest.mark.xfail
def test_12345():
    first_step()
    second_step()
    third_step()

如果我在我调用的三种方法中的任何一种中断言,那么这个测试将会失败。我想测试xfail只有它在second_step()中断言,而不是在其他地方断言。像这样:

def test_12345():
    first_step()
    with pytest.something.xfail:
        second_step()
    third_step()

这可以用py.test吗?

感谢。

1 个答案:

答案 0 :(得分:3)

你可以自己定义一个上下文管理器,就像这样:

import pytest

class XFailContext:
    def __enter__(self):
        pass
    def __exit__(self, type, val, traceback):
        if type is not None:
            pytest.xfail(str(val))
xfail = XFailContext()

def step1():
    pass

def step2():
    0/0

def step3():
    pass

def test_hello():
    step1()
    with xfail:
        step2()
    step3()

当然,您也可以修改contextmanager以查找特定的异常。 唯一需要注意的是,你不能导致“xpass”结果,即(部分)测试意外通过的特殊结果。