Ответ
В pytest для автоматического вызова фикстуры для каждого теста в её области видимости используется параметр autouse=True. Это полезно для setup/teardown операций, которые должны выполняться всегда, например, для логирования, очистки тестовых данных или подготовки окружения.
Базовый пример:
import pytest
@pytest.fixture(autouse=True)
def auto_log_test_start_and_end():
"""Эта фикстура автоматически запустится для каждого теста в модуле."""
print("n--- Начало теста ---")
yield # Здесь выполняется сам тест
print("--- Конец теста ---")
def test_user_creation():
# Фикстура auto_log_test_start_and_end вызовется автоматически
assert create_user("test").id is not None
def test_user_deletion():
# И для этого теста тоже
assert delete_user("test") is True
Ключевые моменты:
- Область видимости (scope): Фикстуру с
autouse=Trueможно ограничить. По умолчаниюscope="function". Для подготовки на уровне класса или модуля это нужно указать явно.@pytest.fixture(autouse=True, scope="class") def setup_for_test_class(): """Выполнится один раз перед всеми тестами в классе.""" init_test_database() yield cleanup_test_database() - Порядок выполнения: Фикстуры с
autouse=Trueвыполняются до фикстур, явно запрошенных в аргументах теста. - Использование с yield: Код после
yieldвыполняется после теста (teardown), что идеально для очистки.
Я использую autouse=True для глобальных фикстур, критичных для всех тестов, например, для подключения к тестовой БД или мока внешних сервисов.