运行 Chrome 在 Docker 容器中无头的 Testcafe 脚本

Run a Testcafe Script on Chrome Headless in a Docker Container

我有一个 Testcafe 脚本 (script.js)。我想在 Chrome 浏览器上 运行 这个,但在无头模式下。所以,我使用以下命令。

testcafe chrome:headless script.js

这很好用。但是,现在我希望将它和 运行 Dockerize 到一个容器中。目的是在 Kubernetes 中得到这个 运行ning。我怎样才能做到这一点?

我看到 Testcafe Docker image,但这只是 运行 一个 Testcafe 实例。它不符合我 运行 在容器中 Chrome Headless 中安装此脚本的要求。

(This question和我问的不一样)

如您在 Dockerfile 中所见,testcafe/testcafe Docker 图像基于 Alpine Linux 图像。它不包含 Chrome 浏览器,但您可以 运行 使用 Chromium 浏览器进行测试。 可以在 documentation

中找到更多信息

TestCafe provides a preconfigured Docker image with Chromium and Firefox installed.


Docker

我已经为您创建了一个简单的示例来说明它是如何工作的。 在我的本地机器上,我有 tests 目录,其中包含一个简单的测试脚本 script.js:

root@server1:~# cat /tests/script.js 
import { Selector } from 'testcafe';

fixture `First test`
    .page `http://google.com`;

test('Test 1', async t => {
        // Test code
});

我可以使用以下命令在容器中 运行 这个测试脚本:

root@server1:~# docker run -v /tests:/tests -it testcafe/testcafe chromium:headless /tests/script.js
 Running tests in:
 - Chrome 86.0.4240.111 / Linux 0.0

 First test
 ✓ Test 1


 1 passed (1s)

Kubernetes

此外,您可能希望 运行 在 Kubernetes 中进行一些测试,例如 Jobs

我根据 testcafe/testcafe 图像创建了 Dockerfile,将我的测试脚本复制到适当的位置,然后从这个 Dockerfile:

FROM testcafe/testcafe
...
COPY tests/script.js /tests/script.js
...

最后,我使用上图创建了 Job(也可以是 CronJob):

apiVersion: batch/v1
kind: Job
metadata:
  name: simple-test
spec:
  backoffLimit: 3
  template:
    spec:
      containers:
      - image: <IMAGE_NAME>
        name: simple-test
        args: [ "chromium:headless", "/tests/script.js" ]
      restartPolicy: Never

我们可以看到Job成功完成:

$ kubectl get job,pod
NAME                    COMPLETIONS   DURATION   AGE
job.batch/simple-test   1/1           18s        14m

NAME                    READY   STATUS      RESTARTS   AGE
pod/simple-test-w72g2   0/1     Completed   0          14m