23

I searched for a long time and surprisingly found no satisfactory answer.

I have multiple modules/files in my Python project that I wrote unit tests for using unittest. The structure is such that I have production-modules module_A.py and module_B.py in one directory (say myproject/production) and corresponding test-files test_module_A.py and test_module_B.py in a sibling directory (say myproject/tests).

Now I have coverage.py installed and want to run all the tests associated with the project (i.e. all .py-files with the prefix test_ from the tests directory) and receive a coverage report showing the coverage for all the production-modules (module_A.py and module_B.py).

I figured out that I can do this by running the following commands from the myproject/tests directory:

  • coverage erase
  • coverage run -a --source myproject.production test_module_A.py
  • coverage run -a --source myproject.production test_module_B.py
  • coverage report

This gives me that nice table with all my production modules listed and their coverage results. So far so good.

But can I do this with just one command? Assuming I have not 2 but 20 or 200 tests that I want to include in one report, doing this "by hand" seems ridiculous.

There must be a way to automate this, but I can't seem to find it. Sure a shell-script might do it, but that is rather clumsy. I am thinking of something akin to unittest discover, but for coverage.py this doesn't seem to work.

Or could I accomplish this using the coverage-API somehow? So far I had no luck trying.

.

SOLUTION: (credit to Mr. Ned Batchelder)

From myproject/tests directory run:

coverage run --source myproject.production -m unittest discover && coverage report

One line, doing exactly what was needed.

1

1 Answer 1

36

This should do it:

coverage.py run -m unittest discover
Sign up to request clarification or add additional context in comments.

1 Comment

Exactly what I was looking for. I knew I was just missing something about your package. Thanks! The full solution for me was coverage run --source myproject.production -m unittest discover && coverage report. Worked like a charm.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.