На протяжении прошлых лекций мы погрузились в тестирование 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-отчеты — это отличный способ показать вашу работу руководству или коллегам. С их помощью вы можете наглядно продемонстрировать, что сделано, какие проблемы найдены и какой прогресс достигнут.
Теперь вы обладаете всеми необходимыми навыками для создания высококачественных отчетов о тестировании. Пусть ваши коллеги и клиенты увидят, что ваш код не только написал человек, но и протестирован роботом (а значит, с большой вероятностью работает)!
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ