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

Karate UI自动化:如何检查页面卡顿/超时及验证提交后耗时异常?

在Karate UI自动化测试中检测页面卡顿与耗时异常

基础耗时检测方法

  • 用Karate内置的karate.timer()函数记录操作前后的时间差,直接和预设阈值对比:
    * def startTime = karate.timer()
    * click('#submit-button') // 触发目标操作
    * def endTime = karate.timer()
    * def elapsedTime = endTime - startTime
    * assert elapsedTime < 5000 // 设定耗时阈值为5秒
    
  • 调用浏览器Performance API获取页面加载或操作的关键性能指标,比如页面总加载时间:
    * def timingData = script("return window.performance.timing")
    * def totalLoadTime = timingData.loadEventEnd - timingData.navigationStart
    * assert totalLoadTime < 8000 // 页面加载总时间不超过8秒
    

提交元素后的卡顿验证

针对提交操作后的页面卡顿,可从以下维度验证:

  • 结合元素等待与时间统计:提交后等待目标状态元素(如成功提示)出现,同时记录从提交到元素出现的耗时,超过阈值则判定异常:
    * def submitStartTime = karate.timer()
    * click('#submit-form') // 提交表单或元素
    * waitFor('#success-alert').timeout(10000) // 最长等待10秒
    * def submitEndTime = karate.timer()
    * def waitElapsed = submitEndTime - submitStartTime
    * assert waitElapsed < 7000 // 提交到状态反馈的耗时不超过7秒
    
  • 检测页面帧率(FPS):卡顿通常伴随帧率骤降,通过浏览器脚本计算一段时间内的帧率,判断是否低于正常水平:
    * def currentFps = script("""
      return new Promise(resolve => {
        let frameCount = 0;
        const start = performance.now();
        const timer = setInterval(() => {
          frameCount++;
          const elapsed = performance.now() - start;
          if (elapsed >= 1000) {
            clearInterval(timer);
            resolve(frameCount / (elapsed / 1000));
          }
        }, 16);
      })
    """)
    * assert currentFps > 20 // 确保帧率不低于20
    
  • 捕获长任务(Long Tasks):页面卡顿往往由超过50ms的长任务引起,通过PerformanceObserver检测这类任务:
    * def longTaskCount = script("""
      return new Promise(resolve => {
        const observer = new PerformanceObserver(list => {
          const tasks = list.getEntries().filter(t => t.duration > 50);
          observer.disconnect();
          resolve(tasks.length);
        });
        observer.observe({ entryTypes: ['longtask'] });
        setTimeout(() => observer.disconnect(), 3000);
      })
    """)
    * assert longTaskCount == 0 // 确保无超时长任务
    

进阶技巧

  • 全局耗时统计:在BeforeFeature或AfterStep钩子中统一添加时间记录逻辑,自动跟踪所有操作的耗时,批量排查异常。
  • 自定义性能标记:在关键操作前后通过performance.mark()添加标记,后续通过performance.getEntriesByName()获取标记间的耗时,精准定位卡顿环节。

内容的提问来源于stack exchange,提问作者Tripti Paliwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:52:35