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

Изоляция тестов с базой данных

Вопрос

Как обычно изолируют интеграционные тесты с настоящей PostgreSQL, чтобы они не влияли друг на друга и были быстрыми?

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

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

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

Коротко

Правильный ответ: Тест в транзакции с откатом, схема одна на сессию. Откат транзакции после теста почти бесплатен и возвращает базу в исходное состояние, а миграции и схема создаются один раз.

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

  1. Каждый тест создаёт новую базу данных с нуля
  2. Тесты запускаются строго последовательно в заданном порядке
  3. Используют SQLite в памяти вместо PostgreSQL
  4. Тест в транзакции с откатом, схема одна на сессиюправильный ответ

Разбор

Откат транзакции после теста почти бесплатен и возвращает базу в исходное состояние, а миграции и схема создаются один раз. Так делают pytest-django и типичные фикстуры для SQLAlchemy. Новая база на тест слишком медленная, зависимость от порядка запрещена, а SQLite отличается от PostgreSQL поведением (типы, блокировки, JSON), и тесты пропустят настоящие ошибки.

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

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

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