2. k6 基础与环境搭建
2.1 k6 简介
k6 是一款开源、云原生的负载测试工具,专为现代 API、微服务和 Web 应用的高性能压测而设计。它使用 Go 语言编写核心引擎,测试脚本则采用 JavaScript(ES6+)编写,兼具高性能与易用性。
核心特性:
- 脚本化压测:使用 JavaScript 编写测试逻辑,支持参数化、检查点、自定义指标。
- 高性能引擎:基于 Go 语言的事件循环架构,单机即可模拟数万虚拟用户(VUs)。
- 内置指标系统:自动采集请求速率、延迟(p50/p90/p99)、错误率等关键指标。
- 峰值流量回放:通过
ramping-arrival-rate执行器精确控制每秒请求数(RPS),模拟真实峰值流量。 - 可观测性集成:原生支持输出结果到 Prometheus、InfluxDB、Datadog 等监控系统。
k6 的典型应用场景包括:
- API 网关与微服务的容量规划
- 电商大促峰值流量回放与瓶颈定位
- 数据库连接池与缓存层压力测试
- CI/CD 流水线中的性能回归检测
2.2 安装 k6
k6 支持主流操作系统,安装方式灵活。以下分别介绍 Windows、macOS 和 Linux 的安装步骤。
Windows 安装
- 方式一:使用 winget(推荐)
winget install k6 - 方式二:使用 Chocolatey
choco install k6 - 方式三:手动下载 从 k6 官方发布页 下载
.msi安装包,双击安装。
macOS 安装
- 使用 Homebrew(推荐)
brew install k6 - 使用 MacPorts
sudo port install k6
Linux 安装
- Debian/Ubuntu(使用官方 APT 仓库)
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69 echo "deb https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list sudo apt-get update sudo apt-get install k6 - CentOS/RHEL/Fedora(使用官方 YUM 仓库)
sudo dnf install https://dl.k6.io/rpm/repo.rpm sudo dnf install k6 - 使用 Docker(通用方式)
docker pull grafana/k6 docker run --rm -i grafana/k6 run - < script.js
💡 提示: 推荐使用包管理器安装,便于后续升级。Docker 方式适合 CI/CD 环境,无需在宿主机安装二进制文件。
2.3 验证安装
安装完成后,打开终端(Windows 使用 CMD 或 PowerShell),执行以下命令验证 k6 是否安装成功:
k6 version
预期输出类似:
k6 v0.54.0 (2024-12-15T10:30:00+0000, go1.23.4, linux/amd64)
如果显示版本号,说明安装成功。接下来运行一个简单的测试脚本,验证 k6 能否正常执行:
k6 run - <<EOF
import http from 'k6/http';
import { check, sleep } from 'k6';
export default function () {
let res = http.get('https://httpbin.test.k6.io/get');
check(res, { 'status is 200': (r) => r.status === 200 });
sleep(1);
}
EOF
该命令会启动 1 个虚拟用户,向 httpbin.test.k6.io 发送一次 GET 请求,并检查响应状态码是否为 200。执行成功后,终端会输出类似如下的摘要报告:
✓ status is 200
checks.........................: 100.00% ✓ 1 ✗ 0
data_received..................: 15 kB 15 kB/s
data_sent......................: 1.2 kB 1.2 kB/s
http_req_duration..............: avg=245ms min=245ms med=245ms max=245ms p(90)=245ms p(95)=245ms
http_req_waiting...............: avg=244ms min=244ms med=244ms max=244ms p(90)=244ms p(95)=244ms
iterations.....................: 1 1/s
vus............................: 1 min=1 max=1
vus_max........................: 1 min=1 max=1
⚠️ 注意: 如果遇到网络问题无法访问
httpbin.test.k6.io,可以替换为本地服务地址(如 http://localhost:8080)进行测试。
2.4 k6 命令行基础
k6 提供了丰富的命令行参数,用于控制测试执行、输出格式和资源限制。下表列出了最常用的命令和参数:
| 命令/参数 | 说明 | 示例 |
|---|---|---|
k6 run |
执行测试脚本 | k6 run script.js |
k6 version |
显示 k6 版本信息 | k6 version |
k6 help |
查看帮助信息 | k6 help run |
--vus |
设置虚拟用户数 | k6 run --vus 10 script.js |
--duration |
设置测试持续时间 | k6 run --duration 30s script.js |
--iterations |
设置总迭代次数 | k6 run --iterations 100 script.js |
--out |
指定结果输出方式 | k6 run --out json=result.json script.js |
--http-debug |
打印 HTTP 请求/响应详情 | k6 run --http-debug script.js |
--quiet |
静默模式,减少输出 | k6 run --quiet script.js |
以下是一个组合参数的实战示例:
k6 run --vus 50 --duration 60s --out json=report.json script.js
该命令使用 50 个虚拟用户持续运行 60 秒,并将结果以 JSON 格式保存到 report.json 文件中,便于后续分析。
2.5 环境验证清单
完成安装后,建议按以下清单逐项确认环境就绪:
| 检查项 | 验证命令 | 预期结果 |
|---|---|---|
| k6 版本 | k6 version |
显示 v0.50.0 或更高版本 |
| 基本执行 | k6 run - <<EOF ... EOF |
输出摘要报告,无报错 |
| 参数生效 | k6 run --vus 5 --duration 5s - <<EOF ... EOF |
报告显示 5 个 VUs,持续 5 秒 |
| 结果输出 | k6 run --out json=test.json - <<EOF ... EOF |
生成 test.json 文件,内容合法 |
💡 提示: 建议将 k6 添加到系统 PATH 环境变量中(包管理器安装会自动完成)。如果使用 Docker,建议创建别名
alias k6='docker run --rm -i grafana/k6' 以简化命令。