WebdriverIO调用browser.getMetrics报NO_TTI_CPU_IDLE_PERIOD错误求助
错误根因
LHError: NO_TTI_CPU_IDLE_PERIOD错误是WebdriverIO性能采集底层依赖的Lighthouse工具抛出的,发生在计算**Time to Interactive(TTI,可交互时间)**指标的阶段。Lighthouse判定TTI的标准是页面完成核心内容渲染后,存在至少5秒的CPU和网络双空闲窗口,当测试页面在采集周期内始终有持续的CPU任务占用、没有符合要求的空闲窗口时,就会触发该报错。
可行解决思路
跳过TTI指标采集
如果你不需要TTI指标,可直接在调用getMetrics()时指定排除该指标,是成本最低的解决方案,参考代码如下:const metrics = await browser.getMetrics({ exclude: ['interactive'] })延长性能采集前置等待时间
调用getMetrics()前增加等待逻辑,给页面足够时间完成所有后台加载、异步渲染、数据上报等任务,优先使用元素等待替代固定时长等待,稳定性更高:// 等待核心业务元素渲染完成 await $('#core-business-element').waitForDisplayed({ timeout: 10000 }) // 额外预留空闲等待窗口 await browser.pause(5000) const metrics = await browser.getMetrics()放宽Lighthouse空闲窗口判定阈值
通过自定义Lighthouse配置,降低TTI计算对空闲窗口的时长要求,适配后台任务较多的页面场景:const metrics = await browser.getMetrics({ lighthouseConfig: { settings: { // 将要求的CPU/网络空闲窗口从默认5000ms调整为3000ms cpuQuietThresholdMs: 3000, networkQuietThresholdMs: 3000, maxWaitForTrace: 60000 } } })排查优化页面持续后台任务
如果需要获取准确的TTI指标,需要对测试页面本身进行排查优化:- 清理页面加载后持续运行的高频
setInterval/setTimeout定时器 - 暂停测试场景下非必要的接口轮询、websocket长连接推送
- 临时屏蔽埋点上报、用户行为监控等非业务核心的第三方脚本
完成优化后再进行性能指标采集即可正常获取TTI数据。
- 清理页面加载后持续运行的高频
内容的提问来源于stack exchange,提问作者Shekhar Navin
相关产品推荐
相关产品推荐

