【问题标题】:How to make Dockerfile for e2e tests written with Puppeteer如何为使用 Puppeteer 编写的 e2e 测试制作 Dockerfile
【发布时间】:2020-02-11 11:15:33
【问题描述】:

我使用名为 Puppetry 的神奇工具来创建 e2e 测试。测试使用 npm 命令 - npm test 运行。轻松愉快。

我使用 Dockerfile 在部署管道中运行这些测试。一切正常。 我想知道这两种方法中哪一种更好(以及为什么):

# Dockerfile 
# other docker instructions

RUN npm run test  <== 1. running tests when the image builds
CMD npm test <== 2. running tests after the image builds

目前,我使用第二种方法。

更多信息:

我的部署管道如下所示:

BuildDev > DeployDev >TestDev

BuildDev 使用构建 Dockerfile。 TestDev 使用测试 Dockerfile。

【问题讨论】:

  • 仅次于@David,使用第二种方法很好,您将无法使用第一种方法与其他容器通信。
  • @Adiii 这两种方法都适用于我的管道。测试从在无头 chromium 实例中打开我的 React 应用程序开始。
  • 实际上在构建过程中没有意义,图像只是一个模板,您没有运行容器可以提供的功能。在构建过程中有一些你无法执行的基调
  • @Adiii 我已经添加了我的管道设置。

标签: docker dockerfile puppeteer e2e-testing


【解决方案1】:

您无法从 Dockerfile RUN 命令运行端到端测试。它在没有持久存储且容器无法访问其他容器的环境中运行。 (从技术上讲,没有外部卷挂载,它在默认的桥接网络上运行。)这意味着,如果被测系统在 Docker 中运行,则测试构建无法访问它,并且无论如何结果都可以。 t 记录在构建图像以外的任何地方。

这也是从 Docker 外部运行的一个很好的候选。通常,端到端测试只会调用系统的外部可见端点并验证以这种方式可观察到的行为。这意味着你不需要调用堆栈中的随机容器,只需要你发布的一个 nginx 代理容器;没有特别需要在 Docker 内部网络上。您还希望获得已发布的结果,而 Docker 的文件系统隔离可能会妨碍您,并且可能希望通过细微的调整重新运行测试(而不是重新运行docker build)。

【讨论】:

  • 感谢您的回复。如果提供更多信息,我已经在问题中添加了我的管道设置。请注意,我的测试在这两种方法中都能成功运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
相关资源
最近更新 更多