объединить файлы покрытия python?

Мне интересно, можно ли объединить файлы coverage.xml в 1 файл, чтобы увидеть глобальный отчет в выводе HTML.

У меня unit/functional tests работает как 1 команда, а integration tests как вторая команда. Это означает, что мое покрытие для unit/functional tests перекрывается unit tests.

Было бы здорово, если бы у меня было какое-то решение этой проблемы, в основном путем объединения этих файлов в 1 файл.


person tunarob    schedule 06.10.2014    source источник


Ответы (6)


Я нашел другое решение. Я использовал функцию combine (прочитайте здесь). Поэтому я запускаю свое покрытие следующим образом: coverage run -p, а затем делаю coverage combine.

Это все. Генерирует 1 комбинированный отчет.

person tunarob    schedule 07.10.2014
comment
coverage combine объединит все файлы .coverage_* в каталоге и создаст объединенный файл .coverage, а остальные удалит. Требуется только при объединении разных каталогов. - person MortenB; 06.02.2018

Вы не можете комбинировать файлы .xml, но можете комбинировать файлы необработанных данных. Ваш рабочий процесс будет выглядеть так:

$ COVERAGE_FILE=.coverage_func coverage run the_functional_tests.py
$ COVERAGE_FILE=.coverage_inte coverage run the_integration_tests.py
$ coverage combine
$ coverage xml
person Ned Batchelder    schedule 06.10.2014
comment
Предостережение к coverage combine заключается в том, что файлы адресуются по пути, поэтому это прекрасно работает, когда покрытие собирается и объединяется в одном и том же каталоге, но требует дополнительных шагов, если один шаг выполняется удаленно (например, в контейнере), где исходные пути Python разные. - person Dima Tisnek; 04.12.2018
comment
В Coverage.py есть функция, специально помогающая в этом: покрытие. readthedocs.io/en/v4.5.x/config.html#paths Похоже, люди часто упускают это из виду. Что я могу сделать, чтобы сделать это более очевидным? - person Ned Batchelder; 04.12.2018
comment
Я выполнил описанные выше шаги, но получил ошибку Нет данных для объединения. В каталоге уже есть два файла для объединения .coverage_ca и .coverage_test. - person Rishi Bansal; 09.01.2019
comment
@GauravKohli я попробовал другой метод. Вы можете найти мое решение ниже. - person Rishi Bansal; 29.07.2020

Вы можете добиться того же результата, используя опцию добавления. Предположим, вы запустили покрытие для трех скриптов Python. После первого покрытия используйте -a для добавления.

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

Распечатать отчет

coverage report -m

Выход: отчет

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%
person Rishi Bansal    schedule 09.01.2019
comment
Я использую этот подход, но на самом деле они не сочетаются! - person Jingpeng Wu; 21.03.2020
comment
@JingpengWu, у меня работает. Вы делаете что-то не так? - person Nishant; 02.01.2021

У меня был похожий случай, когда у меня было несколько пакетов, и у каждого из них были свои тесты, и они запускались с использованием собственного тестраннера. поэтому я мог бы объединить все покрытие xml, выполнив следующие шаги.

  1. Создайте отчет о покрытии по отдельности.
    Вам нужно будет перейти к каждому пакету и создать отчет в этом пакете. Это создаст .coverage файл. Вы также можете добавить [run]parallel=True в свой .coveragerc, чтобы создать файл покрытия с добавлением имени машины и идентификатора процесса.

  2. Объедините все отчеты.
    Вам необходимо скопировать все .coverage файлы для этих пакетов в папку seaparte. Возможно, вы захотите запустить пакетный или sh-скрипт, чтобы скопировать все файлы покрытия.

  3. Запустите объединение.
    Теперь, когда у вас есть все файлы отчетов, перейдите в папку, а затем запустите coverage combine. Это удалит все файлы покрытия и объединит их в один файл .coverage. Теперь вы можете запустить coverage html и coverage xml.

person Chandan Kumar    schedule 12.08.2020

Если ваш исходный код находится в каталоге с именем my_project, вы также можете сделать это, если вы включили pytest и pytest-cov в свою виртуальную среду:

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

--cov-append добавит информацию о покрытии функциональными тестами в файл покрытия, созданный при запуске модульных тестов.

person the-kakfa-dude    schedule 08.10.2019

Используйте опцию -a с командой запуска покрытия. например: запуск покрытия -a test1.py Это добавит результаты в существующий файл покрытия, проверьте то же самое, выполнив отчет о покрытии.

person shaz    schedule 15.02.2019
comment
Добавьте больше информации о своем ответе. - person 0xInfection; 15.02.2019
comment
Это тот же ответ, который я дал выше. Пожалуйста, попробуйте предложить что-то, что еще не упомянуто здесь. - person Rishi Bansal; 29.03.2019