有没有简便方法可以快速定位运行缓慢的spec?
识别慢spec的简便方法
你可以直接用测试框架内置能力或轻量全局配置完成识别,无需手动遍历文件:
- 用测试框架自带的耗时统计参数
绝大多数测试框架都内置了慢用例统计能力:- RSpec:运行全量spec时加上
--profile N参数,N为你要输出的最慢用例数量,这里直接跑rspec --profile 2即可,执行完成后会直接输出最慢2个spec的文件路径、用例描述和具体耗时 - Jest:执行时加上
--slowTestThreshold 阈值(单位毫秒) --verbose,所有运行时长超过阈值的spec都会被单独标记输出,你可以把阈值设为略低于项目spec的timeout配置,触发超时的用例会直接被筛选出来 - 其他框架比如pytest、Minitest也都有对应的插件或内置参数,核心逻辑都是框架侧自动统计每个用例的耗时,执行完成后按耗时排序输出
- RSpec:运行全量spec时加上
- 新增全局耗时统计钩子
如果你的测试框架没有内置对应能力,可以在全局配置文件中新增一对全局前后置钩子,无需修改任何业务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
相关产品推荐
相关产品推荐

