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

У меня есть многопроцессорное приложение на питоне. И я пытаюсь получить отчет о покрытии после запуска тестов. Я пытаюсь объединить отчеты о покрытии, но не могу сделать это за один раз.

Ниже приведена проблема, с которой я столкнулся. Мои два теста сгенерировали 4 файла покрытия. И когда я запускаю команду "объединить покрытие", я получаю следующую ошибку:

Can't combine line data with arc data

Чтобы объединить файлы покрытия, мне нужно запустить команду "coverage Combine" 4 раза. Но я планирую добавить больше тестов, и это затруднит объединение отчетов.

Итак, как я могу объединить все отчеты о покрытии за один раз?

PS: я установил файл конфигурации следующим образом:

[run]
branch = True
parallel = True
concurrency = multiprocessing

[report]
# Regexes for lines to exclude from consideration
exclude_lines =
    # Have to re-enable the standard pragma
    pragma: no cover

И я могу правильно получить комбинированный отчет для линейного покрытия.

ИЗМЕНИТЬ:

Вот как я запускаю свое приложение, чтобы получить покрытие

coverage --rcfile=coverage_rc_file tester_script.py test1 test2

Приведенная выше команда дважды запускает мое приложение и создает 4 файла покрытия.

Затем я запускаю следующую команду, чтобы объединить результаты:

coverage combine

person Shrihari Voniyadka    schedule 08.07.2016    source источник
comment
Можете ли вы показать, как вы запускаете тесты с покрытием? Зачем вам нужно запускать комбайн четыре раза?   -  person Ned Batchelder    schedule 11.07.2016
comment
@NedBatchelder Я отредактировал свой ответ. Пожалуйста, посмотрите.   -  person Shrihari Voniyadka    schedule 11.07.2016
comment
Интересно, проблема в том, что подпроцессы не знают имя используемого вами rcfile. Если вы назовете его .coveragerc, все ли будет работать?   -  person Ned Batchelder    schedule 11.07.2016
comment
@NedBatchelder Я попытался назвать файл .coveragerc и выполнил команду, не передавая rcfile, но все равно получаю ту же проблему.   -  person Shrihari Voniyadka    schedule 12.07.2016
comment
Извините, у меня закончились идеи. Вам нужно будет предоставить мне код, который я могу использовать для воспроизведения проблемы.   -  person Ned Batchelder    schedule 12.07.2016
comment
Убедитесь, что вы очистили все файлы данных .coverage.* перед повторным запуском тестов.   -  person Ned Batchelder    schedule 12.07.2016
comment
@NedBatchelder Спасибо за ваши быстрые ответы. Внезапно заработал после следующих шагов: Переименовал файл покрытия в .coveragerc. Удалены файлы .coverage. И добавил -a к команде объединения покрытия. Теперь он работает нормально.   -  person Shrihari Voniyadka    schedule 12.07.2016


Ответы (3)


Я столкнулся с той же ошибкой. Проблема была вызвана устаревшими файлами предыдущих запусков. Помогло удаление .coverage.* файлов.

person frantisek    schedule 06.06.2019

Ошибка, которую вы видите, произойдет, если вы используете командную строку для настройки покрытия, например:

coverage run --branch --concurrency=multiprocessing myprogram.py

Проблема в том, что аргументы командной строки не передаются подпроцессам, поэтому основной процесс измеряет покрытие ветвей, а подпроцессы измеряют покрытие строк. Затем шаг объединения не может объединить файлы.

Исправление заключается в использовании файла конфигурации .coveragerc. Но вы говорите, что используете это, поэтому я не уверен, что происходит не так, если только вы не начали с аргументов командной строки.

person Ned Batchelder    schedule 09.07.2016
comment
Да, я добавил эти параметры в файл конфигурации. Но все же я получаю сообщение об ошибке. Любые предложения, которые я могу попытаться решить эту проблему? - person Shrihari Voniyadka; 11.07.2016

Я столкнулся с этой проблемой, когда мои модульные тесты запускали код в нескольких каталогах. Мне пришлось добавить файлы .coveragerc в каждый каталог, чтобы все они создавали данные ветвей (или дуг). Я сделал это с помощью символической ссылки на мой основной файл .coveragerc.

person Mike Jarvis    schedule 04.10.2016