2. k6 环境搭建与基础运行
本章是 k6 压测实战的起点。你将学习如何在主流操作系统上安装 k6、编写并运行第一个压测脚本、理解 k6 run 命令的核心参数,以及掌握结果输出的基本方法。完成本章后,你就能在本地独立执行一个完整的压测任务。
2.1 k6 安装(Windows / Mac / Linux)
k6 是一个跨平台的单二进制文件工具,安装方式简洁。下表列出了各操作系统推荐的安装方法:
| 操作系统 | 推荐安装方式 | 命令 / 步骤 |
|---|---|---|
| Windows | Chocolatey / 直接下载 exe | choco install k6 或从 k6.io 下载最新 .exe 并加入 PATH |
| macOS | Homebrew | brew install k6 |
| Linux (Debian/Ubuntu) | APT 仓库 | sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69echo "deb https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.listsudo apt-get update && sudo apt-get install k6 |
| Linux (RHEL/CentOS) | YUM 仓库 | sudo yum install https://dl.k6.io/rpm/k6.reposudo yum install k6 |
| Docker | 容器化运行 | docker pull grafana/k6 |
验证安装: 打开终端,执行
k6 version。如果返回类似 k6 v0.49.0 的版本号,则安装成功。
2.2 第一个 k6 脚本
k6 脚本使用 JavaScript(ES6+)编写。一个最简单的压测脚本包含 export default function,这是虚拟用户(VU)执行的入口。下面是一个针对本地服务的健康检查脚本:
// first-test.js
import http from 'k6/http';
import { sleep } from 'k6';
export default function () {
// 发送 HTTP GET 请求
let res = http.get('http://localhost:8080/health');
// 检查响应状态码
if (res.status !== 200) {
console.error('Health check failed: ' + res.status);
}
// 模拟用户思考时间(1~3 秒随机)
sleep(Math.random() * 2 + 1);
}
脚本结构要点:
import引入 k6 内置模块(如k6/http、k6)。export default function是每个 VU 循环执行的代码块。sleep()模拟用户等待,避免压测变成“无脑”请求。
2.3 k6 run 命令详解
k6 run 是执行压测脚本的核心命令。它支持丰富的参数来控制压测行为。下表列出了最常用的参数:
| 参数 | 缩写 | 说明 | 示例 |
|---|---|---|---|
--vus |
-u |
并发虚拟用户数 | --vus 10 |
--duration |
-d |
压测持续时间 | --duration 30s |
--iterations |
-i |
总迭代次数(与 duration 互斥) | --iterations 100 |
--out |
-o |
结果输出方式(如 json、csv、influxdb) | --out json=result.json |
--stage |
-s |
阶梯式负载配置 | --stage 5s:20,10s:50 |
--http-debug |
无 | 打印 HTTP 请求/响应详情(调试用) | --http-debug |
执行第一个脚本的完整命令:
k6 run --vus 5 --duration 10s first-test.js
该命令启动 5 个虚拟用户,持续压测 10 秒。k6 会在终端实时输出指标,包括请求数、延迟、错误率等。
注意: 如果目标服务未启动,k6 会报告大量连接失败(
connection refused)。请确保 http://localhost:8080/health 可访问,或修改脚本中的 URL。
2.4 结果输出基础
k6 默认在终端输出摘要报告(end-of-test summary)。对于自动化或持久化分析,你需要将结果输出到文件或外部存储。k6 支持多种输出方式:
- 终端摘要(默认): 适合快速验证,包含请求率、延迟分位数、错误率等。
- JSON 文件: 结构化输出,适合程序解析。
--out json=result.json - CSV 文件: 表格格式,适合 Excel 或数据分析工具。
--out csv=result.csv - InfluxDB: 时序数据库,适合长期存储和 Grafana 可视化。
--out influxdb=http://localhost:8086/k6
以下是一个同时输出 JSON 和终端摘要的示例:
k6 run --vus 10 --duration 30s --out json=./output/result.json first-test.js
JSON 输出结构示例(片段):
{
"type": "Point",
"metric": "http_req_duration",
"data": {
"time": "2025-03-20T10:30:00Z",
"value": 123.45,
"tags": {
"status": "200",
"method": "GET",
"url": "http://localhost:8080/health"
}
}
}
实践建议: 在开发阶段使用终端摘要;在 CI/CD 或长期压测中,使用 JSON 或 InfluxDB 输出,便于后续聚合与告警。
2.5 本章小结
通过本章,你已掌握:
- 在 Windows、macOS、Linux 及 Docker 中安装 k6。
- 编写包含 HTTP 请求和 sleep 的基础压测脚本。
- 使用
k6 run命令控制并发数、持续时间和输出方式。 - 理解终端摘要和 JSON/CSV 等结构化输出格式。