Для этого теста я использую pytest с pytest-ansible, а тестовая функция использует приспособление ansible_module, предоставленное pytest-ansible. чтобы вызвать встроенный модуль set_fact для вызова поиска. Тестовая функция выглядит следующим образом (упрощенно):
Код: Выделить всё
import pytest
from pytest_ansible.fixtures import ansible_module
@pytest.mark.ansible(host_pattern='localhost', connection='local')
def test_mylookup(ansible_module):
expr = "lookup('myorg.mycoll.mylookup', 'someterm')"
contacted = ansible_module.set_fact(result=f"{{{{ {expr} }}}}")
contacted_host = contacted['localhost']
result = contacted_host['ansible_facts']['result']
# assertions on result
Проблема в том, что этот тест не добавляет к тестовое покрытие (0%). Другие модули Python в проекте добавляют к тестовому покрытию, но тесты для плагинов Ansible этого не делают.
Я предполагаю, что это связано с тем, что объект ansible_module в какой-то момент использует механизмы Ansible для выполнения модуль, и это, вероятно, позволит моему коду поиска работать в другом потоке или процессе. Но это предположение.
Я использую пакеты pytest-cov и Coverage, чтобы pytest подсчитывал покрытие, и запускаю тест, вызывая pytest с опциями --cov*.
Соответствующие версии пакетов Python (в Python 3.9):
Код: Выделить всё
ansible 8.7.0
ansible-core 2.15.13
pytest 7.4.4
pytest-ansible 4.1.1
pytest-cov 6.0.0
coverage 7.6.4
Подробнее здесь: https://stackoverflow.com/questions/791 ... kup-plugin