Вопрос проверяет понимание того, как организуется подготовка окружения для тестов и переиспользование кода при тестировании.
Фикстуры в PyTest используются для подготовки данных и окружения перед выполнением тестов. Они позволяют переиспользовать код и избегать дублирования setup-логики. Фикстуры могут иметь область видимости и зависимости друг от друга. Это делает тесты чище и проще в поддержке.
Фикстуры — это механизм управления зависимостями и подготовкой окружения в тестах.
Определение: Fixture — функция, которая подготавливает данные или состояние, используемое в тестах.
import pytest
@pytest.fixture
def user():
return {"name": "Alex"}
Использование:
def test_user(user):
assert user["name"] == "Alex"
PyTest автоматически передает результат фикстуры в тест.
Фикстуры могут выполняться:
function — перед каждым тестом
class — один раз на класс
module — один раз на модуль
session — один раз за запуск тестов
Пример:
@pytest.fixture(scope="module")
def db_connection():
# создание соединения
yield conn
# закрытие соединения
Через yield можно:
подготовить ресурсы,
освободить их после теста.
Это удобно для:
базы данных,
файлов,
HTTP-клиентов.
Фикстуры могут зависеть друг от друга:
@pytest.fixture
def client(db_connection):
return Client(db_connection)
PyTest сам построит граф зависимостей.
Фикстуры позволяют централизовать подготовку данных и окружения, уменьшают дублирование и делают тесты более поддерживаемыми.