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