Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад

Что такое fixture в pytest?

Вопрос проверяет понимание фикстур в pytest — механизма для подготовки и очистки тестовых данных, что необходимо для написания чистых и поддерживаемых тестов.

Короткий ответ

Фикстура в pytest — это специальная функция, помеченная декоратором @pytest.fixture, которая предоставляет данные или состояние для тестов. Она выполняется перед тестом (setup) и может выполнять очистку после (teardown). Фикстуры помогают избежать дублирования кода, делая тесты чище и удобнее для поддержки. Их можно передавать в тестовые функции как аргументы.

Длинный ответ

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

Фикстуры могут иметь разную область видимости, что позволяет контролировать, как часто они создаются. Это полезно для оптимизации времени выполнения тестов.

  • scope="function" (по умолчанию) — фикстура создаётся заново для каждого теста.
  • scope="class" — один раз для класса тестов.
  • scope="module" — один раз для модуля.
  • scope="session" — один раз за всю сессию тестирования.
@pytest.fixture(scope="module")
def db_connection():
    conn = create_database_connection()
    yield conn
    conn.close()  # Закрытие соединения после всех тестов модуля

Практическое применение

Фикстуры широко используются для:

  • Подготовки тестовых данных в БД.
  • Создания временных каталогов или файлов.
  • Инициализации клиентов API или веб-драйверов для UI-тестов.
  • Мокирования внешних сервисов.

Вывод: Фикстуры в pytest — это ключевой инструмент для построения надёжной и поддерживаемой тестовой инфраструктуры. Их стоит применять всегда, когда тесты требуют повторяющейся подготовки или очистки данных, чтобы избежать дублирования кода и обеспечить изоляцию тестовых сценариев.

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • Testing

  • PyTest

Ключевые слова

#pytest

#fixture

#testing

#setup

#teardown

Подпишись на Python Developer в телеграм