是否可以在推送映像之前验证容器(对其运行测试(?例如,我有一个 docker 组合,它:
生成>运行单元测试>发布应用
但是,我还想验证已发布的应用程序并针对它运行一些进程外测试。简而言之,我想运行容器,然后运行dotnet test Example.Api.FullstackTests
.
我的码头工人撰写文件
version: '3'
services:
api:
build: .
ports:
- "80:80"
depends_on:
- "building"
- "run-fullstack-tests"
building:
build:
context: .
dockerfile: Dockerfile.Build
run-fullstack-tests:
build:
context: .
dockerfile: Dockerfile.FullstackTests
这可能做到吗?最终,我想在将正在运行的 API 推送到注册表之前验证它是否正确。
有不同类型的测试。 我倾向于将单元测试视为仅依赖于代码库的东西,理想情况下是系统中最小的代码块,因此在构建容器之前,您可以并且应该在开发系统上运行这些代码。 这些在容器内运行很棘手,因为通常您不会随应用程序一起提供这种测试代码,但是代码和测试之间存在非常紧密的代码级连接。
另一方面,集成测试或系统测试倾向于使用真实或至少测试数据库来回答您的最后一个问题,"验证正在运行的 API 是否正确"。 对于这些,你通常会有一个单独的测试驱动程序,该驱动程序与你的服务联系、发出请求并验证结果。 然后你可以按照你的建议去做:
docker build -t myimage .
docker run -d --name test -p 12345:8080 myimage
./integration_tests http://localhost:12345
docker stop test
docker rm test
docker push myimage
在此示例中,服务侦听端口 8080;我们将其映射到主机上的端口 12345;integration_tests
是连接到正在运行的服务的测试运行程序,并将其指向容器。 您可以将其中许多步骤包装在 Docker Compose YAML 文件中,尤其是在运行容器需要大量参数的情况下。
是的,有一个 Docker 命令可以让您在使用docker-compose up
时捕获退出代码。 https://docs.docker.com/compose/reference/up/
如果您从我的基本示例项目开始: https://github.com/djangofan/karate-test-prime-example
然后运行它
docker-compose up --exit-code-from e2e-tests
我认为应该可以做到,对吧?