我想缩小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吗?
感谢。
答案 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”结果,即(部分)测试意外通过的特殊结果。