Что такое фикстура (fixture) в контексте автоматизации тестирования?

«Что такое фикстура (fixture) в контексте автоматизации тестирования?» — вопрос из категории Автоматизация тестирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Фикстура (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.