You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 13:08:12