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

Python 使用pytest参数化键和值列表的字典映射中的所有键/值对?,python,pytest,Python,Pytest,我有一个包含可能有效值映射的字典。如何使用此映射测试我的验证功能是否有效?我不知道如何在pytest中为这个映射正确使用@parameterize选项 我的第一次尝试是: TEST_MAP = { 'key1': ['val1', 'val2', 'val3'], 'key2': ['val1', 'val2', 'val4', 'val5'], 'key3': ['val2', 'val4'], 'key4': ['val3', 'val4', 'val6'],

我有一个包含可能有效值映射的字典。如何使用此映射测试我的验证功能是否有效?我不知道如何在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 ...
问题是,它只是在键上迭代。我还想迭代每个键的值。我需要测试键/值组合

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


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

根据注释进行更新,以使用生成器获得所需的组合:

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

根据注释进行更新,以使用生成器获得所需的组合:

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

借助Amit编写的内容,您不需要单独的函数从字典中获取条目@pytest.mark.parametrizemap,TEST\u MAP.items就可以了。也可以在test\u MAP函数中使用printTEST\u MAP.items

我收到的输出在运行时的格式如下:

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

借助Amit编写的内容,您不需要单独的函数从字典中获取条目@pytest.mark.parametrizemap,TEST\u MAP.items就可以了。也可以在test\u MAP函数中使用printTEST\u MAP.items

我收到的输出在运行时的格式如下:

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

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

[k,x代表k,v在测试图中。x代表v中的项目]


将列表的dict解包为2元组

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

[k,x代表k,v在测试图中。x代表v中的项目]

将列表的dict解压为2元组

这仍然具有列表的价值。我想验证列表中的每个项目。在这种情况下,我应该对key1/val1、key1/val2、key1/val3、key2/val2等进行测试。这仍然是一个列表值。我想验证列表中的每个项目。在这种情况下,我应该对key1/val1、key1/val2、key1/val3、key2/val2等进行测试。