combine python coverage files?

Question:

I’m wondering if it’s possible to combine coverage.xml files into 1 file to see global report in HTML output.

I’ve got my unit/functional tests running as 1 command and integration tests as the second command. That means my coverage for unit/functional tests are overridden by unit tests.

That would be great if I had some solution for that problem, mainly by combining those files into 1 file.

Asked By: tunarob

||

Answers:

You can’t combine .xml files, but you can combine the raw data files. Your workflow would look like this:

$ COVERAGE_FILE=.coverage_func coverage run the_functional_tests.py
$ COVERAGE_FILE=.coverage_inte coverage run the_integration_tests.py
$ coverage combine
$ coverage xml
Answered By: Ned Batchelder

I found a different solution. I used combine feature (read here)
So I run my coverage like: coverage run -p and then I do coverage combine.

If you want to keep the old reports, you can use --keep.

That’s all. It generates 1 combined report.

Answered By: tunarob

You can achieve same result by using appending option. Suppose you ran the coverage on three python scripts.After first coverage use -a for appending.

coverage run first.py
coverage run -a second.py
coverage run -a third.py

Print the report

coverage report -m

Output:Report

Name             Stmts   Miss  Cover   Missing
----------------------------------------------
first.py           97      1    99%   95
second.py            1      0   100%
third.py            10      0   100%
----------------------------------------------
TOTAL               108      1    99%
Answered By: Rishi Bansal

If your source code is in a directory called my_project, you can also do this if you have included pytest and pytest-cov in your virtual environment:

pytest --cov-report html --cov=my_project unit_tests
pytest --cov-report html --cov=my_project --cov-append functional_tests

The --cov-append will add the functional test coverage info to the coverage file that was created when you ran the unit tests.

Answered By: the-kakfa-dude

I had similar case where I had multiple packages and each of them had its tests and they were run using own testrunner. so I could combine all the coverage xml by following these steps.

  1. Indivisually generate the coverage report.
    You would need to naviagte to each package and generate the report in that package. This would create .coverage file. You can also add [run]parallel=True in your .coveragerc to create coverage file appended with machine name and processid.

  2. Aggregate all the reports.
    You need to copy all the .coverage files to for these packages to a seaparte folder. You might want to run a batch or sh script to copy all the coverage files.

  3. Run combine.
    Now naviagte tp the folder when you have all the report files and then run coverage combine. This will delete all the coverage files and combine it to one .coverage file. Now you can run coverage html and coverage xml.

Answered By: Chandan Kumar