Когда вы разрабатываете большой проект, случайно можно забыть некоторые части кода, которые нужно протестировать. Coverage.py - это инструмент на python, который поможет вам в этом.
Установка
Используйте pip или easy_install, как вам по душе
pip install coverage
Запуск и удаление
Для запуска в проекте Django используйте команду:
overage run --source='.' manage.py test the-app-you-want-to-test
Эта команда заполнит «.coverage», который расположен в COVERAGE_FILE, а затем вы можете увидеть результаты или отчет. Если вам нужно удалить полученные данные, воспользуйтесь командой:
coverage erase
Для одного файла
Если вы хотите проверить только код Python, то вам необходимо сделать:
coverage run your_program.py arg1 arg2 arg3
Есть несколько дополнительных опций, которые вы можете посмотреть
по ссылке
.
О шаблонах можно узнать
в разделе плагинов
.
Просмотр результата
Если вы хотите вывести результаты в командной строке:
coverage report
Для более понятных и удобных отчетов:
coverage html
Чтобы точно знать, какая часть вашего кода покрыта тестами, используйте следующую команду:
coverage annotate -d directory-where-to-put-annotated-files
Программа сгенерирует тот же файл исходного кода с дополнительным синтаксисом:
- Строка с «>» означает, что она была выполнена.
- Строка, начинающаяся с «!», Означает, что она не была выполнена.
- Строка, начинающаяся с «-» означает, что строка была исключена из статистики покрытия.
Хороший уровень покрытия
Хорошее покрытие обычно приходится на 90%. Однако, если результат 100%, это может быть плохим сигналом, так как, возможно, дело с покрытием, а не с качеством тестов.
Несколько советов:
- Будьте осторожны с качеством ваших тестов.
- Не замедляйте скорости своего разработчика ради покрытия.
- Используйте покрытие, чтобы найти непроверенный код и решить, заслуживает ли он покрытия.
Исключаем код
Иногда нам нужно исключить некоторый код, который не нуждается в покрытии. Существует несколько вариантов:
- Указание файлов для исключения и пропуска в .coveragerc.
- Написание в одной строке блока комментария.
# pragma: no cover
Например, если вы хотите исключить сгенерированный код из покрытия, потому что он должен поддерживаться инструментом генерации:
def generated_code(): # pragma: no cover do_something()
Больше информации на Coverage.py documentation.