如何使用 pytest 参数化夹具

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

我遇到了一个问题,我不知道如何解决。

我在conftest.py 文件中有以下固定装置:

@pytest.fixture
def input_payload_1() -> pydantic.BaseModel:
   pass

@pytest.fixture
def input_payload_2() -> pydantic.BaseModel:
   pass

我想用这些装置对我的单元测试进行参数化,以便对两者进行测试。比如:

@pytest.mark.parametrize(
    "input_payload, expected_output",
    [
        ("input_payload_1", {"value"}),
        ("input_payload_2", {"value2"}),
    ],
)
def test_something(input_payload, expected_output):
    result = tested_functionality(input_payload)
    assert result == expected_output

但我在这里很挣扎,因为我无法对此进行参数化。我已经成功地通过使用间接属性使其仅适用于一个固定装置,但不能用于更多固定装置。在这种情况下,我将如何参数化 2 个以上的固定装置?

python testing pytest fixtures
1个回答
0
投票

您可以使用

request
夹具:

# conftest.py

@pytest.fixture
def input_payload_1():
    return "value1"

@pytest.fixture
def input_payload_2():
    return "value2"


# test_example.py

def functionality(value):
    return {value}

@pytest.mark.parametrize(
    "input_payload, expected_output",
    [
        ("input_payload_1", {"value1"}),
        ("input_payload_2", {"value2"}),
    ],
)
def test_something(input_payload, expected_output, request):
    result = functionality(request.getfixturevalue(input_payload))
    assert result == expected_output
© www.soinside.com 2019 - 2024. All rights reserved.