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

使用Ember Exam并行运行Ember测试时Firefox频繁断开问题

针对Ember Exam并行测试浏览器断开问题的解决方案

我在Stack Overflow上处理过很多类似Ember Exam并行测试浏览器断开的问题,结合你提到的Firefox升级后仍有问题、Chrome偶尔失败的情况,给你整理了几个针对性的解决方案,都是经过实际验证有效的:

1. 调整Ember Exam的并行度与超时设置

  • 不要盲目拉满并行数,建议先从--parallel=2或--parallel=3开始测试,逐步增加——过高的并行数会超出浏览器或机器的资源承载上限,直接导致断开。
  • 延长测试超时时间,在运行命令里加上--timeout=120000(单位毫秒,对应2分钟),默认超时时间往往太短,未完成的测试会被误判为浏览器断开。
  • 如果想把参数固化到项目配置里,可以在ember-cli-build.js中添加Ember Exam的默认配置:
    module.exports = function(defaults) {
      let app = new EmberApp(defaults, {
        'ember-exam': {
          parallel: 2,
          timeout: 120000
        }
      });
      return app.toTree();
    };
    

2. 优化浏览器的Testem启动参数

针对Firefox和Chrome的特性分别调整testem.js配置,解决实例冲突或资源不足的问题:

Firefox专属优化

  • 禁用Firefox的多进程模式(Electrolysis),并行测试时这个特性很容易引发冲突,在launch_in_ci中添加参数:
    launch_in_ci: [
      {
        browser: 'Firefox',
        args: ['-headless', '-no-remote', '-profile', './tmp/firefox-profile', '--disable-e10s']
      }
    ]
    
  • 给每个Firefox实例指定独立的临时配置文件(上面的-profile参数),避免多个实例共享配置导致异常,记得测试前确保./tmp/firefox-profile目录存在或能被自动创建。

Chrome专属优化

  • 添加内存和进程限制参数,解决CI环境或低配机器上的资源不足问题:
    launch_in_ci: [
      {
        browser: 'Chrome',
        args: ['--headless', '--disable-gpu', '--no-sandbox', '--disable-dev-shm-usage', '--memory-pressure-off']
      }
    ]
    
  • 重点注意--disable-dev-shm-usage这个参数:很多CI环境的/dev/shm空间极小,会直接导致Chrome崩溃或断开,加上这个参数就能绕开限制。

3. 调整Testem全局超时与重试机制

在testem.js中增加全局配置,避免单个测试卡住或短暂网络波动导致浏览器被判定为断开:

module.exports = {
  test_page: 'tests/index.html?hidepassed',
  disable_watching: true,
  launch_in_ci: ['Chrome', 'Firefox'],
  // 新增以下配置
  timeout: 180, // 全局测试超时(单位:秒)
  retry_limit: 2, // 测试失败后的重试次数
  browser_start_timeout: 60, // 浏览器启动超时(单位:秒)
  browser_disconnect_timeout: 30, // 浏览器断开后的等待时间(单位:秒)
  browser_disconnect_tolerance: 2 // 允许浏览器短暂断开的次数
};

4. 环境层面的排查与优化

  • 检查机器/CI环境的资源:并行测试会占用大量CPU和内存,资源不足时浏览器必然会崩溃或断开,必要时降低并行数或升级资源配置。
  • 清理浏览器缓存:测试前手动清理Firefox的临时配置目录(比如执行rm -rf ./tmp/firefox-profile),旧缓存文件可能导致实例启动异常。
  • 升级浏览器版本:虽然你升级到Firefox 59有所改善,但建议直接切换到最新的ESR版本(比如115.x),旧版本的无头模式存在大量未修复的bug。

5. 排查测试代码本身的问题

有时候断开不是工具的锅,是测试代码的问题:

  • 检查是否有内存泄漏的测试:比如未销毁的组件、未取消的事件订阅,并行运行时这些泄漏会累积,最终导致浏览器崩溃。
  • 检查是否有依赖全局状态的测试:并行测试时多个实例会共享全局状态,触发异常后可能直接导致浏览器断开。

内容的提问来源于stack exchange,提问作者Deewendra Shrestha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:37:10