Ответ
Фикстура (Fixture) — это функция или метод, который подготавливает систему к тесту, устанавливая предопределенное, стабильное и воспроизводимое состояние (данные, конфигурацию, среду), и при необходимости выполняет очистку после теста.
Основные цели:
- Устранение дублирования кода для настройки/очистки в разных тестах.
- Обеспечение изоляции тестов и их независимости от порядка выполнения.
- Повышение читаемости тестового кода.
Пример в Pytest (Python):
import pytest
# Объявление фикстуры
@pytest.fixture
def authenticated_client():
"""Фикстура создает и возвращает клиент API с валидным токеном."""
client = APIClient()
token = login_and_get_token("test_user", "pass") # Настройка
client.set_auth_token(token)
yield client # Передача контроля тесту
client.logout() # Очистка после теста
@pytest.fixture(scope="module")
def shared_database():
"""Фикстура с областью видимости на весь модуль."""
db = create_test_database()
yield db
db.drop()
# Использование фикстуры: передача как аргумента в тест
def test_create_order(authenticated_client, shared_database):
"""Тест использует предварительно аутентифицированный клиент и БД."""
response = authenticated_client.post("/orders", data={"item": "book"})
assert response.status_code == 201
assert shared_database.order_count() == 1
Области видимости (scope) фикстур в Pytest:
function(по умолчанию): Создается заново для каждого теста.class: Создается один раз для класса тестов.module: Создается один раз для модуля с тестами.session: Создается один раз за весь прогон тестов.
Аналоги в других фреймворках: setUp/tearDown в JUnit/xUnit, beforeEach/afterEach в Jest/Jasmine.