Pytest:将多个参数传递给固定装置

MWB*_*lin 6 pytest

我想使用灵活的固定装置进行数据调用,可以在整个测试套件中重复使用。为此,我希望理想地传递的不仅仅是参数。然而,下面的代码片段通常仅适用于一个参数:

@pytest.fixture
def getData(request):
    """Variable data query"""
    data_detail = request.param
Run Code Online (Sandbox Code Playgroud)

pytest 文档中,没有任何暗示可以使用多个参数,例如:

@pytest.fixture
def getData(request):
    """Variable data query"""
    data_detail = request.param[0]
    time_detail = request.param[1]
Run Code Online (Sandbox Code Playgroud)

有谁知道如何构建一个可以传递多个参数/参数的 pytest 固定装置?

MrB*_*men 10

您可以使用元组或字典作为固定装置参数:

@pytest.fixture
def tuple_params(request):
    yield sum(request.param)


@pytest.mark.parametrize("tuple_params", [(1, 2, 3)], indirect=True)
def test_tuple_params(tuple_params):
    print(tuple_params)  # 6


@pytest.fixture
def dict_params(request):
    yield f"{request.param['a']}_{request.param['b']}"


@pytest.mark.parametrize("dict_params", [{"a": "foo", "b": "bar"}],
                         indirect=True)
def test_dict_params(dict_params):
    print(dict_params)  # foo_bar
Run Code Online (Sandbox Code Playgroud)

一般来说,参数可以是任何对象,因此您始终可以将夹具参数放在合适的对象中。

使用元组或列表参数,您还可以访问每个索引的值,如示例中所示。