Назад к вопросам
Senior
8
Расскажи про scope фикстур в pytest и подводные камни при использовании session scope.
Компании, где спрашивали
Tangem
Ответ от нейросети
sobes.tech AI
В pytest фикстуры могут иметь разные уровни scope, определяющие время жизни и область действия фикстуры:
- function — фикстура создаётся заново для каждого теста (по умолчанию).
- class — фикстура создаётся один раз на каждый тестовый класс.
- module — фикстура создаётся один раз на каждый модуль (файл с тестами).
- package — фикстура создаётся один раз на пакет.
- session — фикстура создаётся один раз на всю сессию запуска тестов.
Использование session scope полезно для дорогих по времени или ресурсам операций, например, поднятие тестовой среды, подключение к базе данных, запуск внешних сервисов.
Подводные камни при использовании session scope:
- Состояние фикстуры сохраняется между тестами: если фикстура возвращает изменяемый объект, изменения в одном тесте могут повлиять на другие, что приводит к трудноуловимым багам.
- Трудности с изоляцией: тесты могут стать зависимыми друг от друга из-за общего состояния.
- Проблемы с очисткой: teardown для session фикстуры выполняется только один раз в конце, что может привести к накоплению ресурсов или данных.
- Параллельный запуск: при использовании параллельного запуска тестов (например, pytest-xdist) session scope может вести себя неожиданно, так как сессия может быть локальна для каждого процесса.
Рекомендуется тщательно продумывать, что именно помещать в session scope, и при необходимости использовать дополнительные механизмы для очистки состояния между тестами.