Вопрос проверяет понимание фикстур в pytest — механизма для подготовки и очистки тестовых данных, что необходимо для написания чистых и поддерживаемых тестов.
Фикстура (fixture) в pytest — это мощный механизм для управления зависимостями тестов. Она позволяет централизованно настраивать ресурсы, которые требуются для выполнения тестовых сценариев, такие как подключение к базе данных, создание временных файлов или инициализация объектов. Основная цель — отделить код подготовки данных от логики самого теста, что повышает читаемость и упрощает повторное использование.
Фикстура определяется с помощью декоратора @pytest.fixture. Когда тестовая функция объявляет параметр с именем фикстуры, pytest автоматически вызывает эту фикстуру и передаёт её возвращаемое значение в тест. Фикстура может возвращать любое значение: число, строку, объект класса и т.д.
import pytest
@pytest.fixture
def sample_data():
# Эта часть выполняется перед каждым тестом (setup)
data = {'key': 'value'}
yield data # Возвращаем данные тесту
# Код после yield выполняется после теста (teardown)
print("Очистка после теста")
def test_example(sample_data):
assert sample_data['key'] == 'value'Фикстуры могут иметь разную область видимости, что позволяет контролировать, как часто они создаются. Это полезно для оптимизации времени выполнения тестов.
scope="function" (по умолчанию) — фикстура создаётся заново для каждого теста.scope="class" — один раз для класса тестов.scope="module" — один раз для модуля.scope="session" — один раз за всю сессию тестирования.@pytest.fixture(scope="module")
def db_connection():
conn = create_database_connection()
yield conn
conn.close() # Закрытие соединения после всех тестов модуляФикстуры широко используются для:
Вывод: Фикстуры в pytest — это ключевой инструмент для построения надёжной и поддерживаемой тестовой инфраструктуры. Их стоит применять всегда, когда тесты требуют повторяющейся подготовки или очистки данных, чтобы избежать дублирования кода и обеспечить изоляцию тестовых сценариев.