Откат базы данных после запуска тестов Selenium GUI
Я использую тесты Selenium GUI в веб-приложении Java. Поскольку эти тесты на самом деле являются клиентскими, как мы можем откатить базу данных после выполнения теста?
4 ответа
То, что вы ищете, называется паттернами разрушения. Так как вам нужно отслеживать все ресурсы, созданные в тесте, и автоматически уничтожать / освобождать их во время Teardown. Я явно не знаю твои рамки, но для этого случая
откат базы данных после запуска теста
хорошим кандидатом является Inline Teardown. Он включает логику разрыва в конце метода испытаний сразу после проверки результата. Вот так:
В последнее время я присутствовал на разговоре о докере. Докладчик создавал док-контейнер с базой данных mysql для демонстрационных целей. Я сразу подумал о том, как использовать это для интеграционного тестирования, так как вы можете создать чистый экземпляр базы данных без особых усилий.
Я искал, если уже есть некоторые лучшие практики и нашел их на веб-сайтах
- TestContainers - обратите внимание на ссылку Временные контейнеры базы данных
- Учебник - Docker, JPA и Тестирование - полный пример
Я нахожусь в стадии оценки того, как интегрировать это, но я уверен, что это то, что я (и, надеюсь, вы) искал. Рабочий процесс будет:
- Тестовое выполнение
- Запустить докер контейнер с картинки с пустым
- Заполните базу данных основными данными (при необходимости)
- Запустить тест
- Выбросить докер контейнер
Я предполагаю, что вы не можете "откатить" базу данных, поскольку веб-приложения обычно фиксируют транзакции между запросами.
Вам нужно будет реализовать свой собственный откат. Возможно, вы могли бы создать нового пользователя для каждого теста и удалить любые изменения, сделанные этим пользователем после теста. Или, может быть, вы хотите реализовать шаблон команды.
Вы также можете найти каскадное удаление полезным
Спасибо вам за ваши предложения. Я решил использовать mysqldump для этой цели. В Ant выполните резервное копирование и восстановление тестовой базы данных до и после каждого пакетного теста.