【发布时间】:2019-08-26 14:35:27
【问题描述】:
我将 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...
我该怎么做?我知道我无法在测试时更改测试数量,但我很确定我在收集时拥有相同的库存,所以理论上是可行的......
【问题讨论】:
标签: pytest ansible-inventory testinfra