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-отчеты — это отличный способ показать вашу работу руководству или коллегам. С их помощью вы можете наглядно продемонстрировать, что сделано, какие проблемы найдены и какой прогресс достигнут.

Теперь вы обладаете всеми необходимыми навыками для создания высококачественных отчетов о тестировании. Пусть ваши коллеги и клиенты увидят, что ваш код не только написал человек, но и протестирован роботом (а значит, с большой вероятностью работает)!

1
Задача
Модуль 3: Django, 22 уровень, 9 лекция
Недоступна
Генерация HTML отчета о тестировании
Генерация HTML отчета о тестировании
1
Задача
Модуль 3: Django, 22 уровень, 9 лекция
Недоступна
Генерация отчета о покрытии тестами
Генерация отчета о покрытии тестами
3
Опрос
Mock-тестирование внешних API, 22 уровень, 9 лекция
Недоступен
Mock-тестирование внешних API
Mock-тестирование внешних API
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ