使用pytest参数化键和值列表的字典映射中的所有键/值对?

2024-03-29 14:02:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含可能有效值映射的字典。如何使用这个映射来测试我的验证函数是否工作?我不知道如何在pytest中为这个映射正确使用@parameterize选项。你知道吗

我的第一次尝试是:

TEST_MAP = {
    'key1': ['val1', 'val2', 'val3'],
    'key2': ['val1', 'val2', 'val4', 'val5'],
    'key3': ['val2', 'val4'],
    'key4': ['val3', 'val4', 'val6'],
}

@pytest.mark.parametrize("map", TEST_MAP)
def test_map(self, map):
    ...
    validate()
    assert ...

问题是它只在键上迭代。我还想迭代每个键的值。我需要测试键/值组合。你知道吗

如何调整此测试用例的参数以测试映射中的调用键/值对?你知道吗

我不想迭代测试中每个键的值。我希望每个键/值都是它自己的唯一测试。你知道吗


Tags: 函数testmap字典pytest选项parameterizekey2
3条回答

以Amit编写的内容为基础,不需要单独的函数从字典中获取条目。@pytest.mark.parametrize("map", TEST_MAP.items())就可以了。或者可以在test_map函数中使用print(TEST_MAP.items())。你知道吗

当我运行它时,我收到的输出格式如下:

'key1', ['val1', 'val2', 'val3']
'key2', ['val1', 'val2', 'val4', 'val5']
'key3', ['val2', 'val4']
'key4', ['val3', 'val4', 'val6']

显然有必要使用嵌套循环来解包参数集

[(k, x) for k, v in TEST_MAP.items() for x in v]

将列表的dict解压为2元组

根据注释更新以使用生成器获取所需的组合:

def get_items():
TEST_MAP = {
    'key1': ['val1', 'val2', 'val3'],
    'key2': ['val1', 'val2', 'val4', 'val5'],
    'key3': ['val2', 'val4'],
    'key4': ['val3', 'val4', 'val6'],
}
for key, value in TEST_MAP.items():
    for val in value:
        yield key, val


@pytest.mark.parametrize("items", get_items())
def test_map(items):
    key, value = items
    print(key, value)
    assert len(value) > 1

相关问题 更多 >