Основные термины и понятия Pytest
Test / Test Case (тест / тест-кейс) — Одиночная проверка поведения кода: функция, имя которой начинается с test_. Pytest автоматически обнаруживает и запускает такие тесты.
Assertion (ассерция / утверждение) — Проверка, выраженная через стандартный Python-оператор assert. Pytest делает assert-интроспекцию — показывает подробный разбор выражения при ошибке, что упрощает диагностику.
Assertion Introspection (интроспекция ассерций) — Особенность Pytest: при провале assert показываются подробности выражения (значения левой/правой части, вложенные выражения и т.д.).
Fixture (фикстура) — Функция, отмеченная декоратором @pytest.fixture, которая подготавливает окружение (данные, подключения и т. д.) для тестов и/или выполняет очистку после. Тесты “запрашивают” фикстуру через аргументы функций.
Scope (область действия) фикстуры может быть:
- function — на каждый тест,
- class — на класс,
- module — на модуль,
- package — на пакет,
- session — на весь прогон.
Marker (маркер) — Метаданные, которыми помечаются тесты для отнесения их к категориям/группам (например, @pytest.mark.slow, @pytest.mark.integration), а также изменения их поведения. Маркеры упрощают выборку тестов при запуске с помощью опции -m.
Mock — объект-заглушка, который заменяет реальный объект в тестах и позволяет проверять, как он использовался. Monkeypatch — фикстура pytest для временного изменения атрибутов, словарей или environment variables. Используется для изоляции тестируемого кода от его зависимостей (например, подмена запроса к API возвратом готовых данных).
Parametrization (параметризация) — Механизм запуска одного теста с разными наборами аргументов, обычно через декоратор @pytest.mark.parametrize. Это позволяет покрывать больше сценариев без копирования кода.
Skip / Skipif (пропуск теста) — Маркер или вызов (pytest.mark.skip, pytest.mark.skipif) для пропуска теста в определённых условиях (например, на неподходящей платформе).
XFail / Expected Failure (ожидаемо падающий тест) — Маркер pytest.mark.xfail для тестов, которые ожидаемо должны упасть (например, из-за известной ошибки). Их падение не считается ошибкой прогонки.
Plugins (плагины) — Расширения, которые добавляют Pytest-функциональность (например, отчеты, параллельный запуск, интеграции). Pytest имеет богатую экосистему плагинов.
Популярные плагины:
pytest-cov: интеграция сcoverage.pyдля анализа покрытия кодаpytest-xdist: для параллельного запуска тестовpytest-django: для тестирования Django-приложенийpytest-asyncio: для тестирования asyncio-кода
Conftest.py — Специальный файл Python, который используется для хранения общих фикстур, плагинов и хуков для всего проекта. Фикстуры и плагины, объявленные в conftest.py, автоматически обнаруживаются и становятся доступными во всех тестах того же package и его подпакетах. Это центральное место для общей конфигурации.
Hook (хук) — Функция, которая вызывается в определенные моменты выполнения тестов (например, во время сбора или запуска тестов) и позволяет кастомизировать поведение pytest. Используется для написания плагинов или изменения стандартного поведения pytest (например, добавление своих действий перед запуском всех тестов).
Test Suite (набор тестов) — Группа тестов (обычно множество функций/файлов), которые выполняются вместе.
Test Collection (сбор тестов) — Процесс, когда Pytest сканирует каталоги и файлы, находит тесты и готовит их к выполнению.
Test Report (отчет о тестах) — Итоговый вывод после выполнения тестов, включающий количество прошедших, проваленных, пропущенных и xfail-тестов.
Тестовый проект PyTest на GitHub
https://github.com/ivanshamaev/pytest-tutorial









Leave a Reply