【问题标题】:How to verify file download on docker containers without volumes?如何在没有卷的 docker 容器上验证文件下载?
【发布时间】:2019-10-04 17:15:51
【问题描述】:

我正在尝试使用 selenium-grid、docker 容器、jenkins 和 aws-ecs 设置自动化测试套件。

selenium-grid 将使用 aws-ecs 设置。自动化测试将作为 jenkins 管道的一部分执行。

问题在于测试套件包含文件下载测试。我不能使用卷,因为容器将在与 jenkins 工作区不同的机器上运行。

有什么方法可以断言文件已下载?容器中运行的浏览器实例能否提供文件下载已开始的任何确认信息?

请在下面找到我用于在 本地 设置上验证文件下载的 stepdef。

@And("a file called (.*) should be downloaded to my downloads directory")
public void verifyFileDownload(String filename) throws InterruptedException {
    Thread.sleep(1000);
    List<String> results = new ArrayList<String>();
    File[] files = new File(DOWNLOAD_DIRECTORY).listFiles();
    for (File file : files) {
        if (file.isFile()) {
            results.add(file.getName());
        }
    }
    assertThat(results.contains(filename), is(true));
}

【问题讨论】:

  • 您能否将下载设为单独的步骤?那么你就不需要做测试了,因为当步骤完成后下载就完成了,否则如果有问题,步骤就会失败。
  • 这正是预期的结果。但是如何检查文件是否已下载到 docker 容器中?
  • 如果您手动进行下载 (docker exec mycontainer wget ...),那么它将阻塞直到完成或失败,并且应用通常的 unix 返回码 - 零表示成功,非零表示失败。我假设如果 step 命令失败(这是可取的),你的整个 Jenkins 构建将失败。

标签: file docker jenkins selenium-grid amazon-ecs


【解决方案1】:

你可以进入你的容器。 如果你知道你的容器在哪个服务器上运行,你可以运行

docker exec -it [container_name] /bin/bash

并手动检查您的文件是否在此处。

【讨论】:

  • 测试作为自动化套装的一部分运行。无法手动验证文件是否已下载。我已经编辑了问题以添加用于在本地设置上验证相同的步骤。然而,这在云基础架构上是不可能的。
  • 我无法正常工作。所以我改变了测试来验证点击下载链接的响应代码。它不完全是我们所需要的。这是一个更好的解决方法。
猜你喜欢
  • 2019-12-10
  • 1970-01-01
  • 2017-07-24
  • 2017-03-22
  • 2019-12-26
  • 1970-01-01
  • 2017-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多