用途
k6 用于负载测试(load testing)、性能测试(performance testing)与 API 压力测试(stress testing)。当需要评估 API 或服务在并发访问下的响应表现、错误率与吞吐能力时,可编写 k6 脚本并执行,通过阈值判断是否达到预期质量标准。
安装与验证
- macOS:
brew install k6 - Debian/Ubuntu:添加 k6 仓库后
sudo apt-get install k6 - Windows:
choco install k6 - Docker:
docker run --rm -i grafana/k6 run - <script.js - 验证版本:
k6 version
主要能力
基础测试脚本
脚本基于 JavaScript,导入 k6/http 的 http、k6 的 check、sleep。通过 options 设置 vus(并发虚拟用户数)与 duration(运行时长),在默认导出函数中发起请求并用 check 断言。使用 k6 run script.js 执行。
虚拟用户与时长
可通过 vus、duration、iterations 控制执行规模,也可用 stages 定义阶段(ramp up 爬坡、steady state 稳态、ramp down 降坡)。
测试类型
- 负载测试:模拟典型预期流量。
- 压力测试:阶梯式递增超过正常容量。
- 浸泡测试(soak):长时间持续负载(如 8 小时)。
- 峰值测试(spike):流量骤增。
- 断点测试(breakpoint):用
ramping-arrival-rate执行器寻找系统极限。
校验与阈值
check 可断言状态码、响应体内容、响应时间、Content-Type 等。thresholds 定义通过/失败标准,如 http_req_duration 的 p(95)<500、http_req_failed 的 rate<0.01、checks 的 rate>0.99、http_reqs 的 rate>100,也可对带标签请求设置阈值(如 http_req_duration{name:login})。任一阈值未通过时 k6 以非零状态退出,适合作为 CI 门禁。
HTTP 方法与鉴权
支持 http.get、post、put、del,以及 multipart 文件上传(http.file)。可在请求头中携带 Bearer token;也可在 setup 中登录获取 token 并传给默认函数;还可用 http.cookieJar() 设置 Cookie。
分组与标签
使用 group 组织用户流程(如 login、browse),并通过 tags 给请求打标签,便于在阈值与输出中按 name 过滤。
参数化
使用 SharedArray 配合 k6/data 与 papaparse 读取 JSON/CSV 数据;SharedArray 只在加载时读取一次并在 VU 间共享,以减少内存占用。
自定义指标
可创建 Counter(累计计数)、Rate(真值比例)、Trend(分布,含 min/max/avg/p90/p95)、Gauge(最后值),并在脚本中添加数据,同时在 thresholds 中对自定义指标设置阈值。
结果输出
k6 run 默认输出 stdout 摘要。可输出到 JSON(--out json=results.json)、CSV(--out csv=results.csv)、InfluxDB(--out influxdb=http://localhost:8086/k6)、Grafana Cloud(需设置 K6_CLOUD_TOKEN 并使用 --out cloud),也支持多输出同时使用。可用 handleSummary 自定义摘要输出。
浏览器测试
通过 k6/browser 使用浏览器场景,scenarios.ui 指定 executor: 'shared-iterations' 与 browser.type: 'chromium',在异步函数中打开页面、定位元素、输入与点击,并用 check 校验页面文本。
CI/CD 集成
提供 GitHub Actions 示例:使用 grafana/k6-action@v0.3.1 并指定 filename,可通过 env 传入 K6_CLOUD_TOKEN。阈值作为质量门禁,未通过时该步骤失败。
常见模式
资料中给出三类常见脚本示例:API 端点测试(带 stages 与 thresholds 的健康检查)、登录流程测试(登录后取 token 再访问个人资料)、文件上传测试(上传 PDF 并校验状态码与耗时)。
适用场景与限制
适合在 CI/CD 中对 API 性能和稳定性做自动化校验,也适合在测试环境模拟负载、压力、峰值与长时间运行。限制与未提供信息:资料未说明 k6 的具体许可、版本兼容矩阵、云服务收费标准、浏览器测试的完整支持范围与非 Chromium 浏览器支持情况,以及除文中列出的执行器与输出方式之外的其他功能。