我有一个字典,其中包含可能的有效值的映射。如何使用此映射测试验证功能是否正常工作?我不知道如何在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 ...
此问题是仅在键上进行迭代。我还想遍历每个键的值。我需要测试键/值组合。
如何调整此测试用例的参数化,以测试映射中的调用键/值对?
我不想遍历测试中每个键的值。我希望每个键/值都是它自己的唯一测试。
答案 0 :(得分: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
答案 1 :(得分:1)
使用嵌套循环解压缩参数集显然很必要
[(k, x) for k, v in TEST_MAP.items() for x in v]
将列表的字典解压缩为2个元组
答案 2 :(得分:0)
Pi带Amit编写的内容,您不需要单独的函数即可从字典中获取项目。 @pytest.mark.parametrize("map", TEST_MAP.items())
可以。或者,您可以在print(TEST_MAP.items())
函数中使用test_map
。
我收到的输出在运行时的格式如下:
'key1', ['val1', 'val2', 'val3']
'key2', ['val1', 'val2', 'val4', 'val5']
'key3', ['val2', 'val4']
'key4', ['val3', 'val4', 'val6']