Sobes.tech
Back to questions
Senior
9

Расскажи про scope фикстур в pytest и подводные камни при использовании session scope.

Companies where asked
Tangem

Answer from AI

sobes.tech AI

В pytest фикстуры могут иметь разные уровни scope, определяющие время жизни и область действия фикстуры:

  • function — фикстура создаётся заново для каждого теста (по умолчанию).
  • class — фикстура создаётся один раз на каждый тестовый класс.
  • module — фикстура создаётся один раз на каждый модуль (файл с тестами).
  • package — фикстура создаётся один раз на пакет.
  • session — фикстура создаётся один раз на всю сессию запуска тестов.

Использование session scope полезно для дорогих по времени или ресурсам операций, например, поднятие тестовой среды, подключение к базе данных, запуск внешних сервисов.

Подводные камни при использовании session scope:

  • Состояние фикстуры сохраняется между тестами: если фикстура возвращает изменяемый объект, изменения в одном тесте могут повлиять на другие, что приводит к трудноуловимым багам.
  • Трудности с изоляцией: тесты могут стать зависимыми друг от друга из-за общего состояния.
  • Проблемы с очисткой: teardown для session фикстуры выполняется только один раз в конце, что может привести к накоплению ресурсов или данных.
  • Параллельный запуск: при использовании параллельного запуска тестов (например, pytest-xdist) session scope может вести себя неожиданно, так как сессия может быть локальна для каждого процесса.

Рекомендуется тщательно продумывать, что именно помещать в session scope, и при необходимости использовать дополнительные механизмы для очистки состояния между тестами.