Docker运行TestCafe测试遇连接类错误,寻求解决办法
如何在Docker容器中正常运行TestCafe测试?
针对你在Docker容器中运行TestCafe测试遇到的浏览器连接失败、WebSocket关闭、socket hang up等问题,可通过以下步骤解决:
1. 优化浏览器启动参数
Docker环境下的无头浏览器需要更完整的兼容参数,避免因环境限制导致启动失败:
Chromium 调整示例
修改runner.js中的浏览器参数,添加必要的兼容选项:
.browsers('chromium:headless --no-sandbox --disable-dev-shm-usage --disable-gpu --no-first-run --disable-extensions --disable-background-networking')
Firefox 调整示例
如果使用Firefox,同样补充参数:
.browsers('firefox:headless --no-sandbox --disable-dev-shm-usage --width=1920 --height=1080 --start-maximized')
2. 调整TestCafe运行配置
- 关闭实验性代理模式:
experimentalProxyless特性在Docker网络环境下可能引发连接问题,暂时禁用该配置:const testcafe = await createTestCafe(); // 移除{ experimentalProxyless: true } - 降低并发数先验证:先将
concurrency(3)改为concurrency(1),确认单浏览器能正常运行后,再逐步增加并发数。 - 延长初始化超时:在
run()方法中添加超时参数,给浏览器足够的启动时间:.run({ timeout: 180000 }) // 3分钟超时,根据需求调整
3. 增加Docker容器共享内存
Docker默认的共享内存(shm)空间较小,不足以支撑浏览器运行,需调整容器的shm大小:
- 直接启动容器时指定:
docker run --shm-size=2g your-testcafe-image-name - 若使用Docker Compose,在配置文件中添加:
services: tests: build: . shm_size: '2gb'
4. 优化依赖与镜像配置
- 添加TestCafe到项目依赖:确保本地与容器内的TestCafe版本一致,在
package.json中添加:"devDependencies": { "testcafe": "^2.6.2" // 使用你本地测试通过的版本 } - 修复依赖安装问题:尽量避免
--force --legacy-peer-deps,优先解决依赖冲突;若必须使用,确保安装完成后无报错。 - 添加
.dockerignore文件:避免复制本地node_modules等不必要文件到容器,减少冲突:node_modules .git .gitignore .env
5. 验证基础运行
先简化测试流程,用TestCafe命令直接运行单测试文件,排除runner脚本的问题:
修改package.json中的脚本:
"scripts": { "test:docker": "npx testcafe chromium:headless --no-sandbox --disable-dev-shm-usage src/tests/masterdata/single-test-file.js" }
然后在容器内执行npm run test:docker,确认基础运行正常后再恢复runner脚本。
内容的提问来源于stack exchange,提问作者İbrahim Akar
相关产品推荐
相关产品推荐

