我有一个Docker compose设置,其中有20个相互依赖的不同服务。我正在编写一个脚本,该脚本使用cacheRedirects: {
Query: {
node: (_, args, { getCacheKey }) => {
const cacheKey = getCacheKey({
__typename: "Item",
id: args.id,
});
return cacheKey;
},
},
},
在容器上运行测试。
尽管如此,我还是遇到了一些问题:
docker-compose run my_service ...
的脚本可以访问这两个文件。这是一个挑战,因为据我所知,在运行docker-compose
之后,这些容器将关闭。我能想到的唯一解决方案是使用docker-compose run
运行它,然后执行测试命令并检索文件。但这有点麻烦。有更好的方法吗?答案 0 :(得分:2)
测试完成后,他们应该输出两个XML文件...
如果任务的主要功能是读取文件或将文件生成到本地文件系统,则通常最好在Docker外部运行它。对于集成测试,这甚至非常简单:在主机上运行测试并指向其发布的端口,而不是在Docker容器中运行测试并指向其他容器的端点。如果您的测试环境可以运行docker-compose
命令,那么您可以启动容器堆栈作为测试装置。
如果出于某种原因它们必须在Docker中运行,则可以将主机目录绑定安装到容器中以接收结果文件。 docker-compose run
确实支持其他-v
卷安装,因此您应该能够运行类似的
docker-compose run -v $PWD/my_service_tests:/output my_service ..
我不仅要停止并删除正在运行测试的容器,还要删除所有启动的容器,因为它依赖于它们。
我不认为Docker Compose具有该选项;不是那聪明。考虑两个不同的测试同时运行的情况,每个测试运行一个单独的测试容器,但共享一个数据库容器。第一个测试无法停止数据库容器,因为第二个测试正在使用它,但是Compose并没有真正意识到这一点。
如果您不介意为每次测试运行一个完整的隔离堆栈,则可以使用docker-compose -p
选项来执行此操作。然后,您可以使用docker-compose rm
为该特定测试运行清理所有内容。
docker-compose -p test1 run -v $PWD/test1:/output my_service ...
docker-compose -p test1 stop
docker-compose -p test1 rm
答案 1 :(得分:0)
- 测试完成后,他们应该输出带有测试结果的XML文件和带有覆盖率结果的XML文件。我要我的 调用docker-compose的脚本可以访问这两个脚本 文件。
您可以将测试报告写入容器内的某个文件夹。该文件夹可以使用卷映射到Docker主机上的文件夹。因此,运行docker-compose
命令的脚本将能够使用它们。
这是一个挑战,因为据我所知,跑步后 docker-compose运行,这些容器被关闭。
它们已停止。但是,下次您运行docker-compose时,它们将重新启动preserving mounted volumes。
Note:
Compose缓存用于创建容器的配置。当你 重新启动未更改的服务,Compose重用现有的服务 容器。重复使用容器意味着您可以更改 您的环境很快。
这意味着即使容器退出后,您也可以使用docker cp
命令复制由测试服务生成的报告文件。
docker cp
应该可以正常工作,无论其数量如何。例如,假设测试已将reports.xml
写入容器内的/test_reports
文件夹。测试容器停止后,您可以使用docker cp
将文件复制到主机。
测试完成后,我想停止并删除不仅 我正在对所有已启动的容器进行测试的容器 因为它取决于他们。我该如何自动做到?
使用docker-compose down
Stops containers and removes containers, networks, volumes, and images created by up.
如果您使用所有相关服务定义了被测服务,并且测试服务本身位于同一撰写文件中,则该命令将起作用。