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

Azure Pipeline执行ng test时ChromeHeadless捕获超时偶发非零退出问题

单元测试偶发构建故障定位与修复方案

定位步骤

  • 进程残留验证:在测试执行前后分别执行进程查询命令,Linux执行ps aux | grep chrome,Windows执行tasklist | findstr chrome,确认是否存在未正常退出的ChromeHeadless进程占用资源
  • 全量日志采集:将执行命令调整为ng test --code-coverage --browsers=ChromeHeadless --watch=false --log-level debug,收集启动、用例执行、退出全阶段日志,确认多实例的执行时序和报错触发点
  • 清理逻辑验证:临时关闭CI流水线中测试步骤前的工作目录自动清理规则,固定测试报告输出目录,排查是否为目录提前删除导致的报错

修复方案

1. 调整Karma基础配置,从根源避免多实例生成

你之前仅修改retryLimit无法解决启动超时问题,需要同时调整启动超时、浏览器运行相关配置,降低CI环境波动带来的影响:

// karma.conf.js 核心配置修改
module.exports = function (config) {
  config.set({
    // 完全禁用启动重试,避免生成多余测试实例引发竞态
    retryLimit: 0,
    // 延长启动捕获超时时间至120秒,适配CI资源波动场景
    captureTimeout: 120000,
    // 延长浏览器断开后等待重连的时间,避免误判
    browserDisconnectTimeout: 30000,
    // 延长无活动超时时间,适配大量用例执行场景
    browserNoActivityTimeout: 180000,
    // 自定义ChromeHeadless启动参数,解决CI环境启动失败问题
    browsers: ['ChromeHeadlessCustom'],
    customLaunchers: {
      ChromeHeadlessCustom: {
        base: 'ChromeHeadless',
        flags: [
          '--no-sandbox',
          '--disable-gpu',
          // 解决CI环境共享内存不足导致的Chrome启动崩溃问题
          '--disable-dev-shm-usage',
          '--disable-software-rasterizer'
        ]
      }
    }
  })
}

2. 前置残留进程清理逻辑

在执行ng test命令前,先执行Chrome进程清理操作,避免历史残留进程抢占端口或资源:

  • Linux 流水线执行:pkill -f "chrome" || true
  • Windows 流水线执行:taskkill /F /IM chrome.exe /T 2>nul || exit 0

3. 自定义错误过滤逻辑,忽略非核心报错

如果配置调整后仍偶发测试执行完成后的退出码1报错,可以添加自定义Karma reporter,忽略用例全部执行完成后的浏览器断开类错误:

// 在karma.conf.js的plugins配置中追加自定义插件
plugins: [
  require('karma-*'),
  {
    'reporter:ignore-cleanup-error': ['type', function () {
      this.onBrowserError = (browser, error) => {
        // 所有用例已执行完成的情况下,忽略后续浏览器连接断开、ping超时类报错
        const result = browser.lastResult
        if (result && result.total === (result.success + result.failed + result.skipped)) {
          return
        }
        console.error(`浏览器执行错误: ${error}`)
      }
    }]
  }
],
// 注册自定义reporter
reporters: ['progress', 'coverage', 'ignore-cleanup-error']

内容的提问来源于stack exchange,提问作者brian-d

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:15:08