如何使用多个 pytest 标记参数化测试?

How to parametrize a test with several pytest markers?

说我想 运行 具有多个 pytest 标记的相同测试代码。一种解决方案是复制粘贴应用标记的测试:

@pytest.mark.A
def test_a():
    # same
    # code
    ...

@pytest.mark.B
def test_b():
    # same
    # code
    ...

我发现的一个“技巧”是参数化一个虚拟参数并使用 pytest.param:

应用不同的标记
@pytest.mark.parametrize("_", [
    pytest.param(None, marks=pytest.mark.A),
    pytest.param(None, marks=pytest.mark.B),
])
def test(_):
    # same
    # code
    ...

但是很笨拙,添加了不用的参数。有没有更简单的方法?

您可以创建一个产生 pytest.param 的函数,并在 parametrize 中使用假名(空字符串)以避免向测试发送参数

def add_markers():
    for mark in [pytest.mark.A, pytest.mark.B]:
        yield pytest.param(marks=mark)


@pytest.mark.parametrize('', add_markers())
def test_example():
    # code