Chromium 在使用 TestCafe Docker 图像时挂起
Chromium hangs using the TestCafe Docker image
在 testcafe/testcafe Docker 图像中尝试 运行 Chromium headless 会导致浏览器挂起,无论我使用了什么选项。这是我目前拥有的:
"browsers": {
"path": "/usr/bin/chromium-browser",
"cmd": "--headless --disable-gpu --no-sandbox"
}
几分钟后输出:
e2e_1 | Using locally installed version of TestCafe.
e2e_1 | ERROR The HeadlessChrome 71.0.3578 / Linux 0.0.0 browser disconnected. This problem may appear when a browser hangs or is closed, or due to network issues.
e2e_1 |
e2e_1 | Type "testcafe -h" for help.
如果我删除 --headless
,这会正常工作,但是浏览器会渲染到 Xvfb 而不是 运行ning 无头。
Docker文件:
FROM testcafe/testcafe
USER root
RUN apk --no-cache add \
ffmpeg
RUN mkdir /home/e2e
WORKDIR /home/e2e
COPY . .
RUN chmod -R 757 /home/e2e
USER user
RUN npm install
EXPOSE 1337 1338
ENTRYPOINT ["/home/e2e/testcafe-docker.sh"]
testcafe-docker.sh:
#!/bin/sh
XVFB_SCREEN_WIDTH=${SCREEN_WIDTH-1280}
XVFB_SCREEN_HEIGHT=${SCREEN_HEIGHT-720}
dbus-daemon --session --fork
Xvfb :1 -screen 0 "${XVFB_SCREEN_WIDTH}x${XVFB_SCREEN_HEIGHT}x24" >/dev/null 2>&1 &
export DISPLAY=:1.0
fluxbox >/dev/null 2>&1 &
testcafe --ports 1337,1338 "$@"
.testcaferc.json:
{
"browsers": "chromium --no-sandbox",
"src": ["tests/*"],
"reporter": "spec",
"screenshotPath": "tmp/screenshots/",
"screenshotPathPattern": "${DATE}_${TIME}/test-${TEST_INDEX}/${USERAGENT}/${FILE_INDEX}.png",
"takeScreenshotsOnFails": true,
"videoPath": "tmp/reports/screen-captures",
"videoOptions": {
"singleFile": true,
"failedOnly": true,
"pathPattern": "${TEST_INDEX}/${USERAGENT}/${FILE_INDEX}.mp4"
},
"videoEncodingOptions": {
"r": 20,
"aspect": "16:9"
},
"skipJsErrors": true,
"concurrency": 1,
"port1": 1337,
"port2": 1338
}
编辑:我应该纠正自己,当我删除 --headless
时,这不会在 100% 的时间内工作,在无头时它也不会在 100% 的时间内失败。无论哪种方式,它都会间歇性地通过一两个测试,然后失败。 Firefox 确实有 100% 的时间通过。 我也一直在尝试 docker-compose 一点,但我的 docker-compose.yml,行为似乎相同。
[更新] 最新的 TestCafe 版本 (1.1.4
) 包含所有必要的标志。
您可以简化 browsers
property 值,如下所示:
"browsers": "chromium"
在 TestCafe GitHub 上创建了一个关于此的问题。它最终通过在 Chromium 上使用 --disable-dev-shm-usage
标志得到解决。
问题:https://github.com/DevExpress/testcafe/issues/3524
PR,其中 Docker 中 运行 的默认值:https://github.com/DevExpress/testcafe/pull/3557
在 testcafe/testcafe Docker 图像中尝试 运行 Chromium headless 会导致浏览器挂起,无论我使用了什么选项。这是我目前拥有的:
"browsers": {
"path": "/usr/bin/chromium-browser",
"cmd": "--headless --disable-gpu --no-sandbox"
}
几分钟后输出:
e2e_1 | Using locally installed version of TestCafe.
e2e_1 | ERROR The HeadlessChrome 71.0.3578 / Linux 0.0.0 browser disconnected. This problem may appear when a browser hangs or is closed, or due to network issues.
e2e_1 |
e2e_1 | Type "testcafe -h" for help.
如果我删除 --headless
,这会正常工作,但是浏览器会渲染到 Xvfb 而不是 运行ning 无头。
Docker文件:
FROM testcafe/testcafe
USER root
RUN apk --no-cache add \
ffmpeg
RUN mkdir /home/e2e
WORKDIR /home/e2e
COPY . .
RUN chmod -R 757 /home/e2e
USER user
RUN npm install
EXPOSE 1337 1338
ENTRYPOINT ["/home/e2e/testcafe-docker.sh"]
testcafe-docker.sh:
#!/bin/sh
XVFB_SCREEN_WIDTH=${SCREEN_WIDTH-1280}
XVFB_SCREEN_HEIGHT=${SCREEN_HEIGHT-720}
dbus-daemon --session --fork
Xvfb :1 -screen 0 "${XVFB_SCREEN_WIDTH}x${XVFB_SCREEN_HEIGHT}x24" >/dev/null 2>&1 &
export DISPLAY=:1.0
fluxbox >/dev/null 2>&1 &
testcafe --ports 1337,1338 "$@"
.testcaferc.json:
{
"browsers": "chromium --no-sandbox",
"src": ["tests/*"],
"reporter": "spec",
"screenshotPath": "tmp/screenshots/",
"screenshotPathPattern": "${DATE}_${TIME}/test-${TEST_INDEX}/${USERAGENT}/${FILE_INDEX}.png",
"takeScreenshotsOnFails": true,
"videoPath": "tmp/reports/screen-captures",
"videoOptions": {
"singleFile": true,
"failedOnly": true,
"pathPattern": "${TEST_INDEX}/${USERAGENT}/${FILE_INDEX}.mp4"
},
"videoEncodingOptions": {
"r": 20,
"aspect": "16:9"
},
"skipJsErrors": true,
"concurrency": 1,
"port1": 1337,
"port2": 1338
}
编辑:我应该纠正自己,当我删除 --headless
时,这不会在 100% 的时间内工作,在无头时它也不会在 100% 的时间内失败。无论哪种方式,它都会间歇性地通过一两个测试,然后失败。 Firefox 确实有 100% 的时间通过。 我也一直在尝试 docker-compose 一点,但我的 docker-compose.yml,行为似乎相同。
[更新] 最新的 TestCafe 版本 (1.1.4
) 包含所有必要的标志。
您可以简化 browsers
property 值,如下所示:
"browsers": "chromium"
在 TestCafe GitHub 上创建了一个关于此的问题。它最终通过在 Chromium 上使用 --disable-dev-shm-usage
标志得到解决。
问题:https://github.com/DevExpress/testcafe/issues/3524
PR,其中 Docker 中 运行 的默认值:https://github.com/DevExpress/testcafe/pull/3557