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