使用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
相关产品推荐
相关产品推荐

