Ответ вслух Senior Тестирование БД через SQL обновлено

Тестовые данные и изоляция

Вопрос

Как ты организуешь тестовые данные в базе для автотестов API, чтобы тесты не мешали друг другу?

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

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

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

Коротко

Главный принцип: тест не должен зависеть от данных, которые может поменять другой тест. Поэтому каждый тест создаёт себе всё нужное с уникальными значениями, email с суффиксом, uuid в названии, и убирает за собой в блоке, который выполнится даже при падении.

Что должно прозвучать в ответе

  • Каждый тест создаёт свои данные и убирает за собой; уникальные значения (суффиксы, uuid)

  • Создание через API или фикстуры, а не общий набор, который все меняют

  • Отдельная база или схема на прогон, контейнер с миграциями (Testcontainers)

  • Откат транзакцией работает, только если тест и приложение в одном соединении

  • Справочники и большие наборы готовятся сидами; персональные данные из прода только обезличенные

Что могут спросить следом

  • Почему тест, вставивший данные в незакрытой транзакции, не видит их через API?
  • Что делать, если удалить данные нельзя, например платежи?
  • Можно ли брать копию прода для тестов?

Разбор

Главный принцип: тест не должен зависеть от данных, которые может поменять другой тест. Поэтому каждый тест создаёт себе всё нужное с уникальными значениями, email с суффиксом, uuid в названии, и убирает за собой в блоке, который выполнится даже при падении. Создаю данные лучше через API или фабрики фикстур, так они проходят ту же валидацию, что и настоящие, а напрямую в базу пишу то, что через API долго или невозможно получить. Для полной изоляции поднимаю на прогон отдельную базу в контейнере, например Testcontainers, накатываю миграции и сиды справочников. Откат транзакцией красивый, но работает, только если и тест, и приложение используют одно соединение, иначе приложение просто не увидит незакоммиченные данные. Если удалять нельзя, например платежи для отчётности, помечаю тестовые данные и исключаю их из проверок. Копию прода беру только обезличенной: персональные данные в тестовой среде это нарушение 152-ФЗ.

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

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

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