Я использую testinfra , чтобы проверить, запущены ли / включены ли некоторые службы на разных узлах. Testinfra может использовать ansible для тестирования узлов, а также сделает доступными ansible группы. Testinfra использует pytest .
Я хочу протестировать службы только в очень немногих ansible группах, и код выглядит следующим образом.
import pytest
import testinfra
group_service_map = [
('group1', 'svc1'),
('group1', 'svc2'),
('group2', 'svc3')
]
@pytest.fixture
def host_groups(host):
return host.ansible.get_variables()['group_names']
@pytest.mark.parametrize('check', ('running', 'enabled'))
@pytest.mark.parametrize('group, service', group_service_map)
def test_service_running(host, check, host_groups, group, service):
if group in host_groups:
assert getattr(host.service(service), f'is_{check}') is True, f'{service} is not {check}'
Это отлично работает, за исключением того, что pytest вещи, которые я получил 1 passing
test каждый раз, когда вызывается test_service_running
(что много, поскольку это параметризованный тест). Я попытался добавить pytest.skip()
, но затем pytest показывает тесты как пропущенные (желтый s
).
Цель состоит в том, чтобы игнорировать тест в выводе, а не просто пропустить его. Поэтому вместо зеленого или желтого .
мне ничего не нужно.
Я читал api-docs и в исходном коде, но не могу найти никакой информации, если это вообще возможно.
Я сделаю pull-реквест, но сначала хочу проверить, знает ли кто-нибудь о решении.