Автоматическая очистка базы данных Postgres после каждого тестаPython

Программы на Python
Anonymous
Автоматическая очистка базы данных Postgres после каждого теста

Сообщение Anonymous »

У меня есть приложение sqlalchemy, которое взаимодействует с базой данных Postgres. Я хочу провести несколько «интеграционных тестов», используя тест-контейнеры и опробовав различные сценарии.
Для простоты предположим, что в моем приложении я ожидаю только одну таблицу пользователей по крайней мере со строкой администратора.
Я ожидаю, что это будет доступно во всех тестах. Это похоже на мой «базовый уровень» статуса базы данных.
Затем я хочу провести несколько тестов, например, чтобы проверить, могу ли я войти в приложение как для администратора, так и для обычных пользователей< /p>
Я хочу создать разные «сценарии» — возможно, по одному для каждого теста, с разными данными в базе данных.
Например, я хочу сделать 3 теста
  • где есть только строка администратора
  • где есть 2 строки: admin< /code> и user_foo
  • где есть 4 строки: admin, user_x, user_y, user_z< /li>
для каждого теста мне нужно написать 3 разных прибора. Я могу использовать "raw sql" или саму sqlalchemy, сейчас это не важно.
но после запуска теста (который сам по себе может изменить содержимое базы данных) мне нужно " откат» до исходного «базового» статуса.
Однако я не могу просто запустить ROLLBACK, поскольку все изменения фактически зафиксированы.
Как я могу гарантировать, что база данных находится в «базовом» статусе (+ соответствующее приспособление) перед каждым тестом?
Единственное решение, которое я нашел, это
  • удалить базу данных и перестроить ее с нуля перед каждым тестом
  • вручную написать соответствующий sql для восстановления состояния базы данных
  • игнорировать проблему и надеяться, что она сработает...
Первый работает медленно, второй неуправляем, а третий.. . не является решением.
В идеале я хотел бы иметь способ указать pg «пометить» статус базы данных и восстановить его после запуска теста.
Возможно ли это?

Подробнее здесь: https://stackoverflow.com/questions/787 ... -each-test

Вернуться в «Python»