Ответ
Фикстуры в pytest
— это функции, которые предоставляют предсказуемую, фиксированную среду для тестов. Они используются для подготовки данных, настройки соединений (например, с БД) или создания объектов, необходимых для тестирования.
Принцип работы:
Код фикстуры выполняется до запуска теста, который её запрашивает. Если используется yield
, то фикстура разделяется на две части:
- Setup: Код до
yield
(подготовка данных). - Teardown: Код после
yield
(очистка ресурсов), который выполняется после завершения теста.
Пример:
import pytest
import tempfile
import os
# Фикстура создает временный файл и передает его имя в тест
@pytest.fixture
def temp_file():
# Setup: создаем файл
fp = tempfile.NamedTemporaryFile(delete=False, mode='w+')
fp.write('test data')
fp.close()
yield fp.name # Передаем управление и данные тесту
# Teardown: удаляем файл после теста
os.unlink(fp.name)
# Тест принимает имя фикстуры в качестве аргумента
def test_read_from_temp_file(temp_file):
with open(temp_file, 'r') as f:
content = f.read()
assert content == 'test data'
Ключевые преимущества:
- Переиспользование кода: Одна фикстура может использоваться во многих тестах.
- Изоляция тестов: Каждый тест получает свой собственный экземпляр фикстуры (по умолчанию).
- Управление ресурсами: Гарантированная очистка ресурсов благодаря
yield
. - Гибкость: Область видимости фикстуры (
scope
) можно настроить на уровне функции, класса, модуля или всей сессии.