Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to get coverage reporting when testing an Ansible lookup plugin #411

Open
andy-maier opened this issue Dec 5, 2024 · 0 comments
Open

Comments

@andy-maier
Copy link

andy-maier commented Dec 5, 2024

I am developing an Ansible lookup plugin and test code for it. Both the lookup plugin and the test code for the plugin work fine.

I am using "pytest" with "pytest-ansible" for that test, and the test function uses the ansible_module fixture provided by "pytest-ansible" to invoke the builtin "set_fact" module to invoke the lookup. The test function looks like this (simplified):

import pytest

@pytest.mark.ansible(host_pattern='localhost', connection='local')
def test_mylookup(ansible_module):
    expr = "lookup('myorg.mycoll.mylookup', 'someterm')"   # Jinja2 expression to call the lookup to be tested
    contacted = ansible_module.set_fact(result=f"{{{{ {expr} }}}}")    # Call the lookup
    contacted_host = contacted['localhost']
    result = contacted_host['ansible_facts']['result']   # result value returned by the lookup
    # ... assertions on result

Again, this all works fine. The problem is that this test does not add to the test coverage (0%). Other Python modules in my project do add to the test coverage, just the tests for Ansible plugins do not.

I suppose this is because the ansible_module object at some point uses Ansible mechanisms to execute the module, and that probably lets my lookup code run in a different thread or process. But this is speculation.

I am using the "pytest-cov" and "coverage" packages to have "pytest" count the coverage, and run the test by invoking pytest with --cov* options.

Relevant Python package versions (on 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

I would like to know how I can get the test coverage properly accounted for when testing an Ansible lookup plugin with "pytest" and "pytest-ansible".

I also posted this question on SO: https://stackoverflow.com/q/79174901/1424462

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: No status
Development

No branches or pull requests

1 participant