假设我有一个处理 frobs 的包,frob 是一些任意对象,其内部细节并不重要,并且有不同的类型,我将使用颜色来表示。我有一堆返回不同的 frob 的灯具,蓝色的,绿色的等。有些测试仅针对特定颜色(这就是为什么它们是单独的灯具),而其他测试则针对任何 frob,所以我想用我所有的 frob 进行测试弗罗布固定装置。我想编写一个灯具创建器,它获取 frobs 灯具列表,并生成一个在不同 frobs 上进行参数化的灯具,假设 frob 灯具可能具有不同的参数并依赖于其他灯具。
我想做的一个例子是:
@pytest.fixture
def blue_frob(tmpdir, blueness):
return Frob(blueness, workdir=tmpdir)
@pytest.fixture
def green_frob(greenness, tmpsocket):
return Frob(greenness, sock=tmpsocket)
all_frobs = [blue_frob, green_frob]
frobs = make_fixture_from_fixtures(all_frobs)
然后能够在我的测试中使用 frobs 夹具。
我所做的是使用
params
参数,如https://docs.pytest.org/en/8.0.x/reference/reference.html#pytest-fixture-api.
所以:
@pytest.fixture
def blue_frob(tmpdir, blueness):
return Frob(blueness, workdir=tmpdir)
@pytest.fixture
def green_frob(greenness, tmpsocket):
return Frob(greenness, sock=tmpsocket)
all_frobs = [blue_frob, green_frob]
@pytest.fixture(params=all_frobs)
def frobs(request):
return request.getfixturevalue(request.param)