如何使用多个 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
说我想 运行 具有多个 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