我是pytest
的新手,无法通过阅读pytest文档或在Google上搜索来解决问题。
我已经编写了一个自定义参数化灯具,并且我有一个使用所述灯具的参数化测试。我仅在fixture参数为某个值的情况下,才将某些数据标记为XFAIL
。
这是示例代码
import pytest
class A:
def __init__(self, value):
self.value = value
def set(self, value):
self.value = value
@pytest.fixture(scope="module")
def foo():
a = A("-1")
return a
class TestExample:
@pytest.fixture(scope="class", params=["1", "2"])
def my_fixture(self, foo, request):
foo.set(request.param)
return foo
@pytest.mark.parametrize(
argnames="val",
argvalues=[
pytest.param(1,),
pytest.param(2,),
pytest.param(3,),
pytest.param(4,),
]
)
def test_example(self, my_fixture: A, val: int):
assert str(my_fixture.value) == str(val)
在样本中,测试具有4个数据集,而my_fixture
固定装置具有2个参数,总共导致8个测试用例。在这8个测试中,只有2个通过,而其他6个则失败。我想将6个失败的测试标记为XFAIL
。我的首选是使测试用例与测试数据无关。也就是说,我不想在测试应该失败的状态下给出逻辑(因为添加参数化数据可能需要更新测试)。
理想情况下,我会做类似的事情
@pytest.mark.parametrize(
argnames="val",
argvalues=[
pytest.param(1, marks=pytest.mark.xfail("my_fixture.value != 1", reason="Expecting a failure"),
pytest.param(2, marks=pytest.mark.xfail("my_fixture.value != 2", reason="Expecting a failure"),
pytest.param(3, marks=pytest.mark.xfail("my_fixture.value != 3", reason="Expecting a failure"),
pytest.param(4, marks=pytest.mark.xfail("my_fixture.value != 4", reason="Expecting a failure")),
]
)
def test_example(self, my_fixture: A, val: int):
assert str(my_fixture.value) == str(val)
关于我可以尝试的建议吗?