k6 是什么
k6(Grafana k6)是开源负载测试工具:用 JavaScript 描述负载,默认导出函数就是一次迭代,options 中定义虚拟用户、时长与阶段;单二进制运行、无需安装 Node 环境,天然适合本地调试与 CI 集成。压测结论以分位数和趋势为准,攒好自己的性能基线,发版前后才有据可依。
基本信息
| 脚本语言 | JavaScript(ES6 模块),无需 Node 依赖 |
|---|---|
| 运行方式 | 单二进制:k6 run script.js,本地、CI、云均可 |
| 并发模型 | VU(虚拟用户)独立执行迭代,各自拥有 JS 运行时 |
| 常用配置 | options:vus、duration、stages、scenarios、thresholds |
| 结果输出 | 终端汇总加 JSON/CSV 导出,可接 Grafana、Prometheus |
| 执行形态 | 本地 k6 run、CI 流水线集成或 Grafana Cloud k6 托管执行 |
最小可用脚本
最小可用脚本
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
vus: 20, duration: '1m',
thresholds: { http_req_duration: ['p(95)<500'] }
};
export default function () {
const res = http.get('https://example.com/api/ping');
check(res, { 'status is 200': (r) => r.status === 200 });
sleep(1);
}典型使用场景
- 接口基线与回归:发版前跑核心接口,对比 p95 与错误率。
- 容量评估:用阶梯 stages 找吞吐拐点,为扩容提供依据。
- CI 冒烟压测:小规模短时长接入流水线,拦住明显性能退化。
- 瓶颈复现与验证:按线上流量模型复现问题,验证修复效果。
- SLO 守护:把性能目标写进 thresholds,回归时自动判定通过与失败。
- 新人培训:用小脚本理解虚拟用户、迭代与断言三件事的关系。
关键指标怎么读
| 指标 | 含义 | 关注点 |
|---|---|---|
| http_req_duration | 请求耗时分布(p95/p99) | 看分位不看均值,均值会被尖峰掩盖 |
| http_req_failed | 请求失败率 | 非零先查原因,别急着加并发 |
| http_req_waiting | 等待响应首字节时间(TTFB) | 区分服务端慢还是网络慢的入手点 |
| vus / vus_max | 当前与峰值虚拟用户 | 配合阶段曲线识别拐点 |
| iterations | 完成的迭代总数 | 结合时长换算实际吞吐 |
| checks | 断言通过率 | 失败即用例未达标,先修脚本或服务 |
每个 VU 是独立 JS 运行环境;跨迭代共享状态要通过共享模块或显式建模,不能依赖全局变量隐式传递。
别在共享环境直接全速压测:先小规模探路,确认对上下游的影响面再放量。
两次数值要可比:脚本、数据与运行条件保持一致,否则结果没有对照意义。
脚本即代码:k6 脚本纳入版本管理,与接口定义同步评审,避免压测口径过时。