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