Как использовать docker-compose для быстрого восстановления новых баз данных для интеграционных тестов? - PullRequest
0 голосов
/ 28 сентября 2018

Я хотел бы проводить интеграционные и сквозные тесты с базой данных в известном состоянии для каждого запуска, чтобы сделать тесты независимыми и повторяемыми.Простой способ сделать это - использовать docker-compose для создания контейнера базы данных, который каждый раз загружает схему и данные из файла дампа.Тем не менее, это слишком медленно для восстановления базы данных для каждого теста.

Кажется, что лучший способ восстановить базу данных один раз в док-контейнере или томе, а затем скопировать (смонтировать?) Контейнер / томПапка базы данных в контейнер базы данных, который будет использоваться тестом, и каждый тест повторно скопируйте / смонтируйте контейнер / том, чтобы он был свежим.

Однако я не уверен, что лучший способ сделать этос docker-compose есть.Кто-нибудь может привести минимальный пример или объяснение того, как это сделать?

1 Ответ

0 голосов
/ 28 сентября 2018

Вы можете запустить базу данных, используя каталог хоста для основного хранилища данных.Если вы сделаете это, то сможете создать tar-файл каталога и распаковать его заново для каждого запуска теста.

mkdir mysql
docker run -d -p 3306:3306 -v ./mysql:/var/lib/mysql --name mysql mysql
mysql -h 127.0.0.1 < dump.sql
docker stop mysql
docker rm mysql
tar czf mysql.tar.gz mysql
rm -rf mysql
tar xzf mysql.tar.gz
docker run -d -p 3306:3306 -v ./mysql:/var/lib/mysql --name mysql mysql
MYSQL_HOST=127.0.0.1 ./integration_test
docker stop mysql
docker rm mysql

Вам придется раздавать дамп данных отдельно (если выв противном случае используйте AWS, корзина S3 - хорошее место для него), но поскольку это «просто» тестовые данные, которые вы всегда можете восстановить из дампа базы данных, это не особенно ценно, и вам не нужно отслеживать историю версий или пытатьсядержите его под контролем исходного кода.

...