首页/开发/软件测试速查/k6 阈值(thresholds)

k6 阈值(thresholds)

k6 把性能目标写成阈值:如 http_req_duration 的 p(95)<500、http_req_failed 的 rate<0.01;不达标时 k6 以非零码退出,可直接作为 CI 门禁。

软件测试速查开发更新于 2026-10-13

k6 阈值是什么

k6 阈值(thresholds)把性能目标写成可执行判据:在 options 里声明指标表达式(如 p95 低于 500 毫秒、错误率低于 1%),压测结束时自动判定通过或失败,阈值失败时进程以非零退出码结束,可直接当 CI 门禁。没有阈值的压测报告只是数字,有阈值才能自动「说不」。

基本信息

声明位置options.thresholds,每条阈值一个指标表达式
常见表达式p(95)<500、avg<300、rate<0.01、count>1000
指标类型trend 趋势(分位)、rate 比率、counter 计数、gauge 瞬时值
中止机制abortOnFail 越线立即停止,abortOnFailDelay 给缓冲窗口
退出码阈值失败时进程退出码为 99,CI 据此判定失败
分组查看给请求打标签后可拆分指标,按接口单独设阈值

最小示例

最小示例
export const options = {
  thresholds: {
    http_req_duration: ['p(95)<500'],   // 全局 p95 上限 500ms
    http_req_failed: ['rate<0.01'],      // 错误率低于 1%
    checks: ['rate>0.99'],               // 断言通过率高于 99%
  },
};

典型使用场景

  • CI 性能门禁:发版前自动对比阈值,超标直接失败
  • 发布验收:把 SLO 数值翻译成阈值表达式
  • 规模试验判据:低错误率是加压探索的前置条件
  • 版本对比:两版用同脚本同数据,看谁先触线
  • 保护环境:abortOnFail 防止持续压测把测试环境压坏
  • 基线收紧:稳定运行一段时间后逐步上调要求

常用阈值写法

表达式含义注意
p(95)<50095% 请求耗时低于 500ms分位优先于均值
rate<0.01比率类指标低于 1%对应失败率与断言率
avg<300平均值上限均值易掩盖长尾
count>1000计数类下限防止压测没跑够量
abortOnFail越线即停配延迟窗口避免误杀
阈值要基于基线渐进收紧:一开始设宽松(拦住明显退化即可),基线稳定后再提高要求,否则第一天就全红。
不同环境阈值分档:本地、测试、预发机器规格不同,用同一套数字会导致误报与扯皮,按环境给档位。
CI 里别忽略退出码:k6 用退出码 99 表达阈值失败,脚本里吞掉退出码等于把门禁拆了。

易错点

  • 阈值写成恒真式(p95 低于一万毫秒):永远通过,等于没设
  • 环境变了阈值没变:机器规格下降后误报,团队开始无视门禁
  • abortOnFail 没配延迟:瞬抖直接掐掉压测,数据不完整没法分析
  • CI 忽略退出码 99:压测失败当成功记录,门禁形同虚设
  • 阈值与基线脱节:从不重采基线,数字逐渐失去参考意义

数据来源与参考

  • k6 官方文档:Thresholds(k6.io/docs)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌