Ответ
Фикстуры (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).
Ответ 18+ 🔞
А, так вот ты о чём, пизда с ушами! Текстуры, блядь... Да не текстуры, а фикстуры, ёпта! Это ж основа основ, хуй с горы, без них тесты — как суп без соли, одна вода.
Смотри, чтобы не быть распиздяем, который в каждом тесте одно и то же пишет по десять раз. Вот представь: тебе перед каждым тестом надо базу данных поднять, конфиг загрузить, тестового пользователя создать. И после теста всё это ебалом нахуй снести. Так вот фикстуры — это твои личные рабы, которые всё это делают за тебя, пока ты ковыряешь в носу.
Как это, блядь, работает:
- Объявляешь функцию и вешаешь на неё
@pytest.fixture. Это как сказать: "Эй, Питест, вот эта функция — фикстура, запомни её". - Используешь — просто пишешь имя этой фикстуры в параметрах своей тестовой функции. Питест такой: "Ага, ща всё будет", — подготавливает и суёт тебе в руки готовый объект.
- Область видимости (scope) — это вообще магия, блядь. Можно сделать так, чтобы фикстура создавалась один раз на всю сессию тестов (
session), на один файл (module), на класс (class) или, как обычно, на каждый тест (function). Экономия времени — овердохуища!
Вот смотри, живой пример. Допустим, тебе нужен временный файл с конфигом:
import pytest
import os
@pytest.fixture(scope="function") # Дефолтный scope, можно и не писать
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 сам всё за собой приберёт, умная жопа.
def test_read_config(temp_config_file): # Смотри сюда! Просто указал имя — и получил файл!
content = temp_config_file.read_text()
assert "timeout" in content
assert "30" in content # Проверяем, что там та самая хуйня, которую мы записали.
И в чём, сука, кайф?
- Не повторяешься, мудя. Написал логику подготовки один раз — юзай в сотне тестов.
- Всё чисто и аккуратно.
setupиteardown— как инь и янь, в одном месте. - Фикстуры в фикстуры, блядь! Можно строить целые цепочки зависимостей, одна фикстура готовит данные для другой. Красота!
- Питест сам всё видит и делает. Ты просто говоришь "хочу это" — а он уже бежит, готовит.
А насчёт "текстур"... Да это же, блядь, классика! Человек, видимо, слышал звон, да не знает, где он. Фикстуры, ёпта, fixtures. Запомни, а то будешь выглядеть, как тот самый Герасим, который только "Муму" мычать может.