Основы Pytest
Что такое pytest?
подробнее
Pytest — это самый популярный фреймворк для тестирования на Python. Pytest появился, чтобы сделать тестирование в Python простым и приятным: меньше церемоний, больше читаемости и расширяемости. Он применяется везде — от библиотек и веб‑сервисов до ML‑проектов и инфраструктуры - и подходит как одиночным разработчикам, так и большим командам с CI/CD.
Пример простейшего теста
# src/my_func.py
def my_func(a, b):
return a + b
# tests/test_my_func.py
def test_my_func()
assert my_func(1, 2) == 3
Какие преимущества у pytest?
подробнее
- Простота синтаксиса: тест — это обычная функция и обычный
assert. - Отсутствие избыточного кода: Код тестов pytest состоит из коротких самодокументирующихся функций.
- Лучшие сообщения об ошибках: «расшифровка» выражений в
assertи наглядныеtracebacks. - Фикстуры вместо классовой магии: декларативная система подготовки/очистки состояния без наследования.
- Параметризация: Через
@pytest.mark.parametrizeможно использовать один и тот же тест с разными данными без дублирования. - Параллелизация: Есть возможность делать параллельные запуски тестов, делать ретраи, таймауты и бенчмарки.
- Плагины: архитектура, которую можно расширять под любые сценарии (распараллеливание, ретраи, бенчмарки, отчеты и т. д.).
Как pytest обнаруживает тесты?
подробнее
Pytest использует автоматический механизм поиска (test discovery), основанный на именовании файлов и объектов. По умолчанию он сканирует текущую директорию и все вложенные папки, за исключением скрытых или исключенных в настройках.
Основные правила обнаружения
- Файлы: ищет файлы с именами
test_*.pyили*_test.py. - Классы: внутри найденных файлов ищет классы, названия которых начинаются с
Test*.
Важно: у таких классов не должно быть метода__init__. - Функции и методы: ищет функции (вне классов) и методы (внутри тестовых классов), чьи имена начинаются с
test_*.
Если запустить
pytestбез аргументов, поиск начнётся с текущего каталога. Затем pytest рекурсивно заходит во все подпапки. Найденные файлы импортируются как модули Python для выполнения тестов.
Изменить эти правила (например, чтобы pytest искал файлы с другим префиксом), можно в файле конфигурацииpytest.iniчерез параметрыpython_files,python_classesиpython_functions.