Коли ви розробляєте великий проект, можна забути деякі частини коду, які потрібно протестувати. 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.