В этом руководстве мы рассмотрим продвинутые возможности PyTest, одной из самых мощных сред тестирования в Python. Мы создадим полный мини-проект с нуля, который демонстрирует приспособления, маркеры, плагины, параметризацию и индивидуальную конфигурацию.
Настройка среды
Мы начнём с настройки нашей среды, импортируя основные библиотеки Python для работы с файлами и выполнения подпроцессов. Затем установим последнюю версию PyTest, чтобы обеспечить совместимость, и создадим чистую структуру проекта с папками для основного кода, модулей приложений и тестов. Это даст нам прочную основу для организации всего перед написанием какой-либо тестовой логики.
Создание конфигурации и файлов плагинов PyTest
В файле `pytest.ini` мы определяем маркеры, параметры по умолчанию и пути к тестам, чтобы контролировать поиск и фильтрацию тестов. В `conftest.py` мы реализуем собственный плагин, который отслеживает пройденные, неудачные и пропущенные тесты, добавляет опцию `—runslow` и предоставляет приспособления для повторно используемых тестовых ресурсов.
Создание модуля расчёта
В пакете `calc` мы определяем простые математические утилиты, включая сложение, деление с обработкой ошибок и функцию скользящего среднего, чтобы продемонстрировать логическое тестирование. Наряду с этим мы создаём класс `Vector`, который поддерживает арифметические операции, проверки на равенство и вычисление нормы — идеальный пример для тестирования пользовательских объектов и сравнений с помощью PyTest.
Создание утилит ввода-вывода и API
Мы добавляем облегчённые утилиты приложения для работы с JSON и имитируемый API для отработки поведения в реальных условиях без внешних служб. Мы пишем целенаправленные тесты, которые используют параметризацию, xfail, маркеры, `tmp_path`, `capsys` и `monkeypatch` для проверки логики и побочных эффектов.
Запуск тестов
Мы запускаем наш тестовый набор дважды: сначала с конфигурацией по умолчанию, которая пропускает медленные тесты, а затем снова с флагом `—runslow`, чтобы включить их. После обоих запусков мы генерируем JSON-сводку, содержащую результаты тестов, общее количество тестовых файлов и пример журнала событий.
Заключение
PyTest помогает нам тестировать умнее, а не усерднее. Мы разрабатываем плагин, который отслеживает результаты, использует приспособления для управления состоянием и контролирует медленные тесты с помощью пользовательских опций, сохраняя при этом чистоту и модульность рабочего процесса. Мы завершаем подробным JSON-отчётом, который демонстрирует, как легко PyTest может интегрироваться с современными конвейерами CI и аналитики.
С этой основой мы теперь уверены, что можем расширить возможности PyTest, сочетая покрытие, бенчмаркинг или даже параллельное выполнение для крупномасштабного тестирования на профессиональном уровне.
Проверьте полные коды здесь. Не стесняйтесь посетить нашу страницу GitHub для руководств, кодов и ноутбуков. Также подписывайтесь на нас в Twitter и присоединяйтесь к нашему сообществу в SubReddit на 100 тысяч участников ML и подписывайтесь на нашу рассылку. А если вы в Telegram, присоединяйтесь к нам и там.
1. Какие основные компоненты PyTest используются в статье для создания персонализированного и автоматизированного тестирования?
В статье используются следующие компоненты PyTest: приспособления, маркеры, плагины, параметризация и индивидуальная конфигурация.
2. Какие шаги включает в себя настройка среды для работы с PyTest согласно статье?
Согласно статье, настройка среды включает в себя импорт основных библиотек Python для работы с файлами и выполнения подпроцессов, установку последней версии PyTest и создание чистой структуры проекта с папками для основного кода, модулей приложений и тестов.
3. Какие файлы используются для определения конфигурации и плагинов PyTest в статье?
В статье для определения конфигурации и плагинов PyTest используются файлы `pytest.ini` и `conftest.py`. В `pytest.ini` определяются маркеры, параметры по умолчанию и пути к тестам, а в `conftest.py` реализуется собственный плагин.
4. Какие математические утилиты и класс определены в пакете `calc` для демонстрации логического тестирования?
В пакете `calc` определены простые математические утилиты, включая сложение, деление с обработкой ошибок и функцию скользящего среднего. Также определён класс `Vector`, который поддерживает арифметические операции, проверки на равенство и вычисление нормы.
5. Какие тесты используются для проверки логики и побочных эффектов в статье?
Для проверки логики и побочных эффектов в статье используются целенаправленные тесты, которые используют параметризацию, xfail, маркеры, `tmp_path`, `capsys` и `monkeypatch`.