如何根据夹具参数添加参数化的测试数据标记

时间:2020-08-19 13:55:26

标签: python pytest

我是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)

关于我可以尝试的建议吗?

0 个答案:

没有答案