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 流水线中的性能回归检测
k6 架构与数据流 k6 架构与数据流 JS 测试脚本 k6 执行引擎 虚拟用户 (VUs) 目标系统 (SUT) 指标收集器 结果输出 说明:k6 引擎解析 JS 脚本,驱动虚拟用户向目标系统发送 HTTP/GRPC/WebSocket 请求, 同时采集性能指标并输出到终端、JSON 文件或外部监控系统。

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 文件中,便于后续分析。

k6 命令行执行流程 k6 命令行执行流程 终端输入命令 参数解析 脚本加载与编译 执行测试 结果输出 说明:k6 命令行执行流程包括命令输入、参数解析、脚本加载、测试执行和结果输出五个阶段。

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' 以简化命令。