-
Notifications
You must be signed in to change notification settings - Fork 64
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
Comments
@andy-maier, did you get any further with this? I'm also looking at using pytest-ansible for e2e tests. Some randoms that may be helpful to look at:
|
Hello, Internally Ansible uses subprocesses to run the tasks, so I had to configure Coverage to use the multiprocessing mode: # pyproject.toml
[tool.coverage.run]
# The test for the ansible plugin is using ansible itself to run. Ansible works
# with multiprocesses, so we need to configure coverage to work with it.
concurrency = ["multiprocessing"]
# Config needs to be set here and not in the addopts where it would be added to the command.
# When dealing with multiprocessing and subprocesses, only the options can only be set in
# the config file, and not passed by the command line.
# https://coverage.readthedocs.io/en/7.6.10/subprocess.html
branch = true I did it in my I also had to make sure that the source code of my plugin was included in the sources with the Btw thank you very much for the excrept of code showing how to write the test, I basically copy-pasted it to write mine 😅. |
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):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):
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
The text was updated successfully, but these errors were encountered: