如何取消涉及参数化的条件?

时间:2019-09-11 02:58:27

标签: pytest

如何使涉及参数化的条件失效?

问题在于@pytest.mark.xfail(condition=(code == 123), reason="123 is an exception case")不起作用,因为代码是参数化变量。我尝试了一些不同的方法,包括静态类成员,全局变量,并将其设置在expected_setup固定装置中。这些都不起作用(按预期)

@pytest.mark.xfail(condition=(code == 123), reason="123 is an exception case")
E   NameError: name 'code' is not defined
params = [
    cls1,
    cls2,
    cls3,
    cls4
]
@pytest.mark.parametrize('code', params, ids=list(map(str, params)))
class TestContextExit(object):
    @pytest.fixture(autouse=True)
    def expected_setup(self, code):
        self.str1 = 'JETFUEL'
        self.str2 = 'OPERATIONNORTHWOODS'
        self.setup = NewStore(self.str1, self.str2, code)

    def test1(self, code):
        assert self.root.results.result_code == expected_result_code
        assert self.root.results.ta['result_code'] == expected_result_code.code
        assert self.root.results.result_code == expected_result_code

    @pytest.mark.xfail(condition=(code == 123), reason="123 is an exception case")
    def test2(self, code):
        assert self.setup.root['code'] == code

    @pytest.mark.xfail(condition=(code == 123), reason="123 is an exception case")
    def test3(self, code):
        assert self.setup.root['setup'] == NOERROR

有什么想法或模式吗?在查看xfail pytest文档时,除了作为参数的一部分之外,我没有看到任何针对参数设置失败的示例。但是在这种情况下,该类已被参数化,只有两个类测试变成xfails,而不是所有测试。

1 个答案:

答案 0 :(得分:0)

您可以在参数化过程中使用带有xfail标记的pytest.param作为参数值来对参数进行xfail

@pytest.mark.parametrize(code, [1,pytest.param(0,marks=pytest.mark.xfail(reason="reasons")]
def test_a():
    assert code

这用于标记某些参数化值。这将使第二项测试失败。