Протягом минулих лекцій ми заглибилися в тестування API за допомогою pytest і pytest-django. Ми встановили та налаштували ці інструменти, організували тестове середовище, написали перші тести для API і освоїли DRF тест-клієнт. Потім ми навчилися тестувати серіалізатори, представлення і ViewSets, а також зрозуміли, як використовувати Mock для тестування зовнішніх API. Тепер у нас є фундаментальні навички для тестування будь-якого Django-проєкту.
Сьогодні ми вивчимо способи генерації тестових звітів і поговоримо про те, як візуалізувати результати тестів, використовувати їх для аналізу та покращення якості коду, а також про те, як переконати колег у тому, що ваш код дійсно працює.
Створення тестового звіту
Якщо у вас 5 тестів, ви можете спокійно пробігти їх очима і побачити, що все пройшло успішно. Але уявіть, що тестів 500! Або навіть 5000! З такими масштабами стає важко довести всім (в тому числі й собі), що "все працює". Для цього і потрібні тестові звіти. Вони дозволяють:
- Легко побачити, які тести пройшли, а які ні.
- Отримати детальну інформацію про провалені тести, включаючи причину помилок.
- Отримати загальне уявлення про покриття тестами вашої кодової бази (якщо увімкнути метрики покриття).
Генерація базового звіту з pytest
Якщо запустити тести в консолі командою:
pytest
Ви вже бачите базовий звіт у терміналі. Він покаже, скільки тестів пройшло, скільки провалилося, скільки було пропущено, а також час виконання кожного тесту. Приклад виглядає приблизно так:
============================= test session starts ==============================
collected 5 items
tests/test_views.py ..... [100%]
============================== 5 passed in 0.12s ===============================
Але термінал — це нудно. Справжні програмісти люблять красиві графіки та яскраві звіти! До того ж, зручніше показувати результат роботи на зустрічах не у форматі "дивіться на мій термінал", а за допомогою HTML чи іншого візуально привабливого формату.
Встановлення плагіна для HTML-звітів
Для генерації HTML-звітів у pytest використовується плагін pytest-html. Він допоможе згенерувати красиві та зручні HTML-звіти за результатами тестування.
Встановимо його:
pip install pytest-html
Генерація простого HTML-звіту
Тепер, щоб створити HTML-звіт, достатньо додати опцію --html під час запуску тестів:
pytest --html=report.html
Після виконання цієї команди у вашому проєкті з'явиться файл report.html. Відкрийте його в браузері, і ви побачите візуальний звіт про тестування.
Основні фічі HTML-звіту:
- Список всіх тестів із зазначенням їх статусів (пройдено, провалено, пропущено).
- Детальна інформація про помилки (stack trace).
- Зручний пошук і фільтрація за тестами.
Додавання описів тестів у звіт
Щоб звіти виглядали більш професійно і містили корисну інформацію, можна додавати описи тестів. Для цього додайте спеціальний маркер @pytest.mark.
Приклад:
import pytest
@pytest.mark.description("Перевірка роботи головної сторінки API")
def test_homepage_api(client):
response = client.get("/")
assert response.status_code == 200
Тепер у звіті до цього тесту буде додано опис "Перевірка роботи головної сторінки API".
Додаткові параметри для pytest-html
Ти також можеш налаштувати звіти, додавши додаткові метадані або змінивши їх стиль. Наприклад:
pytest --html=report.html --self-contained-html
Опція --self-contained-html створить одиночний HTML-файл, який не буде залежати від зовнішніх CSS або JS.
Для додавання метаданих можна використовувати параметр --metadata:
pytest --html=report.html --metadata "Тестове середовище" "Localhost"
Метадані будуть відображені у заголовку твого звіту.
Аналіз результатів тестування
Як читати звіти? Коли ви відкриваєте HTML-звіт, ви бачите основні розділи:
- Summary (Зведення): показує, скільки тестів пройшло, скільки провалилося, середній час виконання та інші загальні показники.
- Detailed Results (Деталізація): список усіх тестів з їх статусами.
- Failures (Помилки): детальна інформація про кожен провалений тест.
Інтерпретація результатів тестів
Якщо ви бачите багато червоного (провалені тести), це перший сигнал до дії. Відкривайте кожен провалений тест і читайте stack trace, щоб зрозуміти причину помилки. Іноді проблема може бути дуже простою, наприклад, неправильно налаштовані фікстури.
Приклад провалу тесту у звіті:
E AssertionError: очікуваний статус 200, але отримали 404
Покриття коду тестами
Щоб зрозуміти, наскільки ваша кодова база покрита тестами, можна використовувати інструмент coverage.py. Він комплементарний pytest і дозволяє виміряти, які рядки коду були виконані під час тестів.
Встановимо coverage:
pip install coverage
Запустимо тести з вимірюванням покриття:
coverage run -m pytest
Згенеруємо звіт:
coverage html
Тепер у вас з'явиться папка htmlcov, у якій буде звіт про покриття коду. Відкривайте файл index.html у браузері та насолоджуйтесь підсвіченими рядками: зелені рядки покриті тестами, а червоні — ні.
Приклади використання звітів на практиці
Коли ви налаштовуєте тестування у своїй CI/CD системі (наприклад, GitHub Actions, GitLab CI або Jenkins), звіти стають ще більш важливими. Більшість CI/CD платформ підтримують автоматичне відображення звітів і допоможуть вам швидко зрозуміти, чи пройшли тести після зміни коду.
Щоб інтеграція пройшла успішно, переконайтеся, що файл звіту (наприклад, report.html) зберігається в артефактах збірки.
Інструменти для генерації інших форматів звітів
JUnit XML
Якщо ти хочеш генерувати машинно-зчитувані звіти (наприклад, для CI/CD), використовуй JUnit XML-формат. Це робиться за допомогою опції:
pytest --junitxml=report.xml
JUnit-звіти можуть бути інтегровані в Jenkins, Bamboo та інші CI/CD інструменти для аналізу результатів.
Allure Reports
Для більш складної візуалізації звітів можна використовувати Allure. Allure надає яскраві інтерактивні звіти з графіками та статистикою, але налаштування потребує більше зусиль, ніж з pytest-html.
Приклад фінальної команди для запуску тестів
Ось приклад команди, яка генерує одразу кілька типів звітів:
pytest --html=report.html --self-contained-html --junitxml=report.xml
За допомогою цієї команди ви зможете надати командному рядку як HTML-звіт, так і XML для CI/CD.
HTML-звіти — це чудовий спосіб показати вашу роботу керівництву чи колегам. З їхньою допомогою ви можете наочно продемонструвати, що зроблено, які проблеми знайдено і який прогрес досягнуто.
Тепер ви володієте всіма необхідними навичками для створення якісних звітів про тестування. Нехай ваші колеги та клієнти побачать, що ваш код не лише написаний людиною, але й протестований роботом (а отже, з великою ймовірністю працює)!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ