Я использую coveralls в сочетании с coverage.py для отслеживания покрытия кода моего скрипта. Я использую следующие команды:Покрытие кода Python и многопроцессорность
coverage run --parallel-mode --source=mysource --omit=*/stuff/idont/need.py ./mysource/tests/run_all_tests.py
coverage combine
coveralls --verbose
Это работает довольно хорошо, за исключением multiprocessing. Код, выполняемый пулами работников или дочерними процессами, не отслеживается.
Есть ли возможность отслеживать многопроцессорный код? Какой-то конкретный вариант мне не хватает? Может быть, добавление оберток в библиотеку многопроцессорности для запуска покрытия каждый раз, когда возникает новый процесс?
EDIT:
I (и jonrsharpe, а также :-) нашли monkey-patch for multiprocessing.
Однако для меня это не сработает, моя сборная Tracis-CI убита почти сразу после начала. Я проверил проблему на своей локальной машине и, по-видимому, добавил патч к многопроцессорной работе, разоряя мою память. Тесты, которые занимают менее 1 ГБ памяти, нуждаются в более чем 16 ГБ с этим исправлением.
EDIT2:
Обезьяна-патч делает работу после небольшой модификации: Удаление config_file
разбора (config_file=os.environ['COVERAGE_PROCESS_START']
) сделал трюк. Это решило проблему раздутой памяти. Соответственно, соответствующая линия становится просто:
cov = coverage(data_suffix=True)
Вы не проверить код для этих дочерних процессов напрямую? – jonrsharpe
Ну, да, большинство из них я делаю. Но есть некоторые части, которые полезны и выполняются только в том случае, если используется многопроцессорность (например, обертывание доступа к базе данных с помощью блокировок или многопроцессорной очереди для обеспечения последовательного хранения данных). И я знаю, что этот код работает из-за успешных тестов. Было бы неплохо, если бы это тоже появилось на комбинезонах :-) – SmCaterpillar
См. Https://bitbucket.org/ned/coveragepy/issue/117/enable-coverage-measurement-of-code-run-by через http : //nedbatchelder.com/code/coverage/trouble.html – jonrsharpe