Я использую coveralls в сочетании с coverage.py для отслеживания покрытия кода моего скрипта. Я использую следующие команды:
coverage run --parallel-mode --source=mysource --omit=*/stuff/idont/need.py ./mysource/tests/run_all_tests.py
coverage combine
coveralls --verbose
Это работает довольно хорошо, за исключением multiprocessing. Код, выполняемый пулами работников или дочерними процессами, не отслеживается.
Есть ли возможность отслеживать многопроцессорный код? Какой-то конкретный вариант мне не хватает? Может быть, добавление оберток в библиотеку многопроцессорности для запуска покрытия каждый раз, когда создается новый процесс?
ИЗМЕНИТЬ
I (и jonrsharpe, также:-) нашел обезьяна-патч для многопроцессорности.
Однако это не работает для меня, моя Tracis-CI build убивается почти сразу после начала. Я проверил проблему на своей локальной машине и, по-видимому, добавил патч к многопроцессорной работе, разоряя мою память. Тесты, которые занимают менее 1 ГБ памяти, нуждаются в более чем 16 ГБ с этим исправлением.
EDIT2
Обезьяна-патч работает после небольшой модификации: Удаление
анализ config_file
(config_file=os.environ['COVERAGE_PROCESS_START']
) сделал трюк. Это решило проблему раздутой памяти. Соответственно, соответствующая строка просто становится:
cov = coverage(data_suffix=True)