从 pytest文档:
@pytest.mark.parametrize 允许在测试函数或类中定义多组参数和装置。
看起来这意味着pytest.mark.parametrize可以将测试标记为使用多组装置运行?我可以找到很多参数化参数的例子,但我不知道如何参数化不同的装置集。
我认为这个答案很接近,但这实际上只是参数化参数,然后解决测试主体中的不同固定装置。
是否可以使用不同的夹具将测试标记为多次运行?
注意我正在尝试做这样的事情:
import pytest
# some data fixutres
@pytest.fixture()
def data1():
"""Create some data"""
@pytest.fixture()
def data2():
"""Create some different data"""
@pytest.fixture()
def data3():
"""Create yet different data"""
# The tests
@pytest.mark.parametrize('data', [data1, data2])
def test_foo(data):
"""Test something that makes sense with datasets 1 and 2"""
@pytest.mark.parametrize('data', [data2, data3])
def test_bar(data):
"""Test something that makes sense with datasets 2 and 3"""
Run Code Online (Sandbox Code Playgroud)
您可以使用pytest-lazy-fixture插件来完成此操作:
import pytest
from pytest_lazyfixture import lazy_fixture
@pytest.fixture()
def fixture1():
return "data1"
@pytest.fixture()
def fixture2():
return "data2"
@pytest.fixture()
def fixture3():
return "data3"
@pytest.mark.parametrize("data", [lazy_fixture("fixture1"),
lazy_fixture("fixture2")])
def test_foo(data):
assert data in ("data1", "data2")
@pytest.mark.parametrize("data", [lazy_fixture("fixture2"),
lazy_fixture("fixture3")])
def test_bar(data):
assert data in ("data2", "data3")
Run Code Online (Sandbox Code Playgroud)
请注意,有一项建议直接向 pytest 添加类似的功能:https://docs.pytest.org/en/latest/proposals/parametrize_with_fixtures.html