gpt4 book ai didi

docker - 如何使用 docker-compose 快速恢复新数据库以进行集成测试?

转载 作者:行者123 更新时间:2023-11-28 21:07:31 24 4
gpt4 key购买 nike

我想在每次运行时使用已知状态的数据库运行集成和端到端测试,以使测试独立且可重复。一种简单的方法是使用 docker-compose 创建一个数据库容器,每次从转储文件中加载方案和数据。但是,这对于为每个测试恢复数据库来说太慢了。

更好的方法似乎是在 docker 容器或卷中恢复一次数据库,然后将容器/卷数据库文件夹复制(挂载?)到测试将使用的数据库容器中,并让每个测试重新复制/安装容器/卷,使其保持新鲜。

但是,我不确定使用 docker-compose 执行此操作的最佳方法是什么。谁能提供一个最小的例子或解释如何做到这一点?

最佳答案

您可以使用其底层数据存储的主机目录来启动数据库。如果这样做,则可以创建该目录的 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 存储桶是它的好地方)但由于它“只是”测试数据,您始终可以从数据库转储中重新创建,所以它不是特别珍贵,您无需跟踪其版本历史或尝试将其保留在源代码管理中。

关于docker - 如何使用 docker-compose 快速恢复新数据库以进行集成测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52546775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com