将 pytest 夹具列表转换为参数化夹具

问题描述 投票:0回答:1

假设我有一个处理 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 夹具。

python pytest
1个回答
0
投票

我所做的是使用

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)
© www.soinside.com 2019 - 2024. All rights reserved.