我有一个函数,它读取yaml文件并生成测试迭代作为下面的字典列表:
Iterations = lib_iterations()
print Iterations
Iterations = [{'mode':1,'format':5,'ip':'192.16.1.103'},
{'mode':2,'format':6,'ip':'192.16.1.104'},
{'mode':2,'format':8,'ip':'192.16.1.110'},
{'mode':6,'format':2,'ip':'192.16.1.105'},
{'mode':5,'format':7,'ip':'192.16.1.102'},
{'mode':4,'format':2,'ip':'192.16.1.101'}]
我需要能够将此集传递给pytest.mark.parametrize,以便为列表中的每个迭代/每一行生成一个测试。
在调用生成此词典列表的函数lib_iterations之前,我不知道字典键。
关于如何做到这一点的任何想法?
由于 AB
答案 0 :(得分:4)
如果您的问题是如何将迭代列表传递给pytest parametrize装饰器,那么您可以这样做:
@pytest.mark.parametrize('testdata', [i for i in Iterations])
如果测试模块中的迭代内容未知,那么您可以使用pytest_generate_tests
挂钩。在该钩子函数中,您可以加载yaml文件并将其内容传递给metafunc.parametrize
:
import yaml
def pytest_generate_tests(metafunc):
if 'testdata' in metafunc.fixturenames:
with open("testdata.yml", 'r') as f:
Iterations = yaml.load(f)
metafunc.parametrize('testdata', [i for i in Iterations])
使用此灯具的测试功能:
def test_it(testdata):
print testdata