如何有条件地跳过参数化pytest场景?

时间:2017-12-19 19:22:44

标签: pytest

我需要标记某些要跳过的测试。但是,有些测试是参数化的,我需要能够仅跳过某些场景。

我根据需要使用py.test -m "hermes_only"py.test -m "not hermes_only"调用测试。

使用以下标记简单的测试用例:

@pytest.mark.hermes_only
def test_blah_with_hermes(self):

但是,我有一些参数化测试:

outfile_scenarios = [('buildHermes'),
                     ('buildTrinity')]

@pytest.mark.parametrize('prefix', outfile_scenarios)
def test_blah_build(self, prefix):
    self._activator(prefix=prefix)

我想要一种机制来过滤场景列表,或者如果定义了pytest标记,则跳过某些测试。

更一般地说,我如何测试pytest标记的定义?

谢谢。

2 个答案:

答案 0 :(得分:2)

发现它!它的简洁优雅。我只是标记受影响的场景:

outfile_scenarios = [pytest.mark.hermes_only('buildHermes'),
                     ('buildTrinity')]

我希望这有助于其他人。

答案 1 :(得分:0)

一个不错的解决方案from the documentation是这样的:

import pytest


@pytest.mark.parametrize(
    ("n", "expected"),
    [
        (1, 2),
        pytest.param(1, 0, marks=pytest.mark.xfail),
        pytest.param(1, 3, marks=pytest.mark.xfail(reason="some bug")),
        (2, 3),
        (3, 4),
        (4, 5),
        pytest.param(
            10, 11, marks=pytest.mark.skipif(sys.version_info >= (3, 0), reason="py2k")
        ),
    ],
)
def test_increment(n, expected):
    assert n + 1 == expected