如何混合使用请求和常规值进行参数化的 pytest 装置?

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

这对我来说很难在 pytest 文档中找到。所以我才来这里问。

我有一个正在加载数据的夹具。

import pytest

@pytest.fixture(scope="function")
def param_data(request):
    with open(f'tests/fixtures/{request.param}.json') as f:
        return json.load(f)

因此,我想测试 3 个 JSON 文件的函数的执行情况:

  • 测试/装置/data1.json
  • 测试/装置/data2.json
  • 测试/装置/data3.json

如何使用

@pytest.mark.parametrize
做到这一点?我的意思是...

@pytest.mark.parametrize(???)
def test_my_function(dict, expected):
    # Test my_function() with the dict loaded by fixture and the expected result.
    assert my_function(dict) == expected

我看到了两种用法的示例,但没有同时看到这两种用法。 而且,我看到的所有灯具都是通过值返回来固定的,而不是使用

request.param

python pytest fixtures
1个回答
0
投票

使用间接参数化以及“正常”参数。

import pytest

@pytest.fixture
def add_one(request):
    return 1 + request.param

@pytest.mark.parametrize("add_one,expected", ((2, 3), (4, 5)), indirect=["add_one"])
def test_my_func(add_one, expected):
    assert add_one == expected
© www.soinside.com 2019 - 2024. All rights reserved.