2

我想缩小 pytest xfail 标记的范围。就我目前使用的而言,它标志着整个测试功能,功能出现任何故障都很爽。

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

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

如果我在我调用的三种方法中的任何一种中断言,此测试将失败。相反,我希望测试只有在 second_step() 中断言而不是在其他地方断言时才会失败。像这样的东西:

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

py.test 有可能吗?

谢谢。

4

1 回答 1

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()

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

于 2012-07-26T06:31:14.277 回答