Выбор ответа Middle Тестирование и pytest обновлено

scope у фикстуры

Вопрос

Фикстура поднимает контейнер PostgreSQL за 5 секунд. Какой scope разумнее, если тестов 300?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: session для контейнера, данные изолировать откатом. С scope="function" 300 тестов потратят 25 минут только на старт контейнеров.

Варианты ответа

  1. function для контейнера, чтобы тесты были изолированы
  2. session для контейнера, данные изолировать откатомправильный ответ
  3. class для контейнера, по одному на тестовый класс
  4. Без фикстуры, поднимать контейнер в каждом тесте

Разбор

С scope="function" 300 тестов потратят 25 минут только на старт контейнеров. Тяжёлый ресурс создают один раз на сессию, а изоляцию данных обеспечивают дешёвыми средствами: транзакция с откатом, очистка таблиц, отдельная схема. class уменьшит, но не решит проблему, а ручной запуск в тестах ещё хуже.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме