Reputation: 3038
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.
Upvotes: 45
Views: 34681
Reputation: 3038
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.
Upvotes: 42
Reputation: 1236
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.
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.
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.
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
.
Upvotes: 1
Reputation: 111
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.
Upvotes: 10
Reputation: 4486
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%
Upvotes: 23
Reputation: 375574
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
Upvotes: 28