JavaRush /Курси /Модуль 3: Django /Генерація звіту про тестування

Генерація звіту про тестування

Модуль 3: Django
Рівень 22 , Лекція 9
Відкрита

Протягом минулих лекцій ми заглибилися в тестування API за допомогою pytest і pytest-django. Ми встановили та налаштували ці інструменти, організували тестове середовище, написали перші тести для API і освоїли DRF тест-клієнт. Потім ми навчилися тестувати серіалізатори, представлення і ViewSets, а також зрозуміли, як використовувати Mock для тестування зовнішніх API. Тепер у нас є фундаментальні навички для тестування будь-якого Django-проєкту.

Сьогодні ми вивчимо способи генерації тестових звітів і поговоримо про те, як візуалізувати результати тестів, використовувати їх для аналізу та покращення якості коду, а також про те, як переконати колег у тому, що ваш код дійсно працює.

Створення тестового звіту

Якщо у вас 5 тестів, ви можете спокійно пробігти їх очима і побачити, що все пройшло успішно. Але уявіть, що тестів 500! Або навіть 5000! З такими масштабами стає важко довести всім (в тому числі й собі), що "все працює". Для цього і потрібні тестові звіти. Вони дозволяють:

  1. Легко побачити, які тести пройшли, а які ні.
  2. Отримати детальну інформацію про провалені тести, включаючи причину помилок.
  3. Отримати загальне уявлення про покриття тестами вашої кодової бази (якщо увімкнути метрики покриття).

Генерація базового звіту з 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-звіт, ви бачите основні розділи:

  1. Summary (Зведення): показує, скільки тестів пройшло, скільки провалилося, середній час виконання та інші загальні показники.
  2. Detailed Results (Деталізація): список усіх тестів з їх статусами.
  3. 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-звіти — це чудовий спосіб показати вашу роботу керівництву чи колегам. З їхньою допомогою ви можете наочно продемонструвати, що зроблено, які проблеми знайдено і який прогрес досягнуто.

Тепер ви володієте всіма необхідними навичками для створення якісних звітів про тестування. Нехай ваші колеги та клієнти побачать, що ваш код не лише написаний людиною, але й протестований роботом (а отже, з великою ймовірністю працює)!

3
Опитування
Mock-тестування зовнішніх API, рівень 22, лекція 9
Недоступний
Mock-тестування зовнішніх API
Mock-тестування зовнішніх API
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ