我将 testinfra 与 ansible 传输一起使用。它提供了host
具有的夹具ansible
,所以我可以做到host.ansible.get_variables()
。
现在我需要根据该库存中的值创建测试的参数化。
存货:
foo:
hosts:
foo1:
somedata:
- data1
- data2
我想编写一个测试,测试清单中每个主机的 somedata 中的每个“数据”。“每个主机”部分由 testnfra 处理,但我正在努力进行测试的参数化:
@pytest.fixture
def somedata(host):
return host.ansible.get_variables()["somedata"]
@pytest.fixture(params=somedata):
def data(request):
return request.param
def test_data(host, data):
assert 'data' in data
我尝试了两种方式:
@pytest.fixture(params=somedata)
->TypeError: 'function' object is not iterable
@pytest.fixture(params=somedata())
->Fixture "somedata" called directly. Fixtures are not meant to be called directly...
我怎样才能做到这一点?我知道我不能在测试时更改测试次数,但我很确定我在收集时有相同的库存,所以,理论上,它是可行的......