Что такое фикстуры (fixtures) в Pytest?

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

Ответ

Фикстуры (fixtures) в Pytest — это мощный механизм для подготовки, настройки и очистки тестового окружения. Они позволяют инжектировать зависимости в тестовые функции, избегая дублирования кода и соблюдая принцип DRY (Don't Repeat Yourself).

Основные концепции:

  • Объявление: Фикстура — это функция, декорированная @pytest.fixture.
  • Использование: Тестовая функция запрашивает фикстуру, указав её имя в качестве параметра.
  • Область видимости (scope): Управляет временем жизни фикстуры: "function" (по умолчанию, для каждого теста), "class", "module", "session".

Пример: Фикстура для временного файла

import pytest
import os

@pytest.fixture(scope="function")
def temp_config_file(tmp_path):  # Используем встроенную фикстуру tmp_path
    # SETUP: Создаем файл с конфигом
    config_file = tmp_path / "app_config.json"
    config_file.write_text('{"timeout": 30}')

    yield config_file  # Передаем объект файла в тест

    # TEARDOWN: Очистка (неявно выполняется tmp_path)
    # Код после yield выполнится после теста, даже если он упал

def test_read_config(temp_config_file):
    # Фикстура автоматически передается как аргумент
    content = temp_config_file.read_text()
    assert "timeout" in content
    assert "30" in content

Преимущества фикстур:

  • Модульность и переиспользование.
  • Четкое разделение setup/teardown логики.
  • Возможность композиции: фикстуры могут зависеть от других фикстур.
  • Автоматическое обнаружение и использование Pytest.

Связь с вопросом: Термин "текстуры" в исходном вопросе, вероятно, является опечаткой или искажением слова "фикстуры" (fixtures).