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 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
Linux (RHEL/CentOS) YUM 仓库 sudo yum install https://dl.k6.io/rpm/k6.repo
sudo 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 输出,便于后续聚合与告警。
k6 压测执行流程 编写 k6 脚本 k6 run 命令 VU 并发执行 指标收集 结果输出 分析 / 可视化 流程:编写脚本 → 执行命令 → VU 并发 → 收集指标 → 输出结果 → 分析 支持终端摘要、JSON、CSV、InfluxDB 等多种输出方式

2.5 本章小结

通过本章,你已掌握:

  • 在 Windows、macOS、Linux 及 Docker 中安装 k6。
  • 编写包含 HTTP 请求和 sleep 的基础压测脚本。
  • 使用 k6 run 命令控制并发数、持续时间和输出方式。
  • 理解终端摘要和 JSON/CSV 等结构化输出格式。