我有一个Testcafe脚本(script.js
)。我想在Chrome浏览器上运行这个,但是在无头模式下。因此,我使用以下命令:
testcafe chrome:headless script.js
这很好。但是,现在我希望将其Dockerize并在容器中运行。目的是让它在Kubernetes中运行。我怎样才能做到这一点呢?
我看到了Testcafe Docker镜像,但这只是为了运行一个Testcafe实例。它不满足我在Chrome Headless容器中运行此脚本的要求。
(这个问题和我问的不一样)
在Dockerfile中可以看到,testcafe/testcafe
Docker镜像是基于Alpine Linux镜像的。它不包含Chrome
浏览器,但您可以使用Chromium
浏览器运行测试。更多信息可在此文档
TestCafe提供了一个预先配置的Docker镜像,其中安装了Chromium和Firefox。
码头工人
我创建了一个简单的例子来说明它是如何工作的。在我的本地机器上,我有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