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

有没有简便方法可以快速定位运行缓慢的spec?

识别慢spec的简便方法

你可以直接用测试框架内置能力或轻量全局配置完成识别,无需手动遍历文件:

  • 用测试框架自带的耗时统计参数
    绝大多数测试框架都内置了慢用例统计能力:
    • RSpec:运行全量spec时加上--profile N参数,N为你要输出的最慢用例数量,这里直接跑rspec --profile 2即可,执行完成后会直接输出最慢2个spec的文件路径、用例描述和具体耗时
    • Jest:执行时加上--slowTestThreshold 阈值(单位毫秒) --verbose,所有运行时长超过阈值的spec都会被单独标记输出,你可以把阈值设为略低于项目spec的timeout配置,触发超时的用例会直接被筛选出来
    • 其他框架比如pytest、Minitest也都有对应的插件或内置参数,核心逻辑都是框架侧自动统计每个用例的耗时,执行完成后按耗时排序输出
  • 新增全局耗时统计钩子
    如果你的测试框架没有内置对应能力,可以在全局配置文件中新增一对全局前后置钩子,无需修改任何业务spec文件:
    示例(RSpec的spec_helper.rb):
    # 全局前置钩子,记录用例开始时间
    RSpec.configure do |config|
      config.before(:each) do |example|
        @example_start_time = Time.now.to_f
      end
    
      # 全局后置钩子,耗时超过阈值就打印信息
      config.after(:each) do |example|
        duration = Time.now.to_f - @example_start_time
        # 阈值可根据你项目的timeout配置调整,比如设为timeout的80%
        if duration > 25
          puts "慢用例检测:#{example.full_description},文件路径:#{example.location},耗时:#{duration.round(2)}s"
        end
      end
    end
    
  • 运行时实时排查
    如果已经启动了全量spec执行没加任何参数,可以直接观察运行时的实时输出,绝大多数测试框架都会在执行每个spec前打印对应的用例描述,长时间停在某条输出上的spec就是触发超时的慢用例,等它抛出timeout错误后也会直接输出对应的文件位置。

找到对应spec后,你可以单独运行该spec并开启网络请求日志,就能快速验证是否是API mock失效导致的对外请求超时。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:36:00