HelloWorld k6 使用指南

2026年7月2日 作者:admin

本指南用最直白的方式带你从零上手k6的HelloWorld:覆盖安装、编写第一份脚本、运行本地与云端测试、查看关键指标与日志、设置阈值与场景、常见调优与在CI中集成的实操步骤,文末提供常见故障排查、示例脚本、CI集成模板可直接复用及调优贴士。

HelloWorld k6 使用指南

先把概念讲清楚:k6 是什么、HelloWorld 为何重要

把 k6 想象成一个可以「模仿很多人工同时访问你服务」的电动机器:你给它一个脚本,它按脚本发起请求并记录每一个响应的时间和结果。HelloWorld 的意义不只是跑通第一个请求,而是建立一套可重复、可观测、可持续的测压流程。学会 HelloWorld,你就掌握了最小闭环:脚本 -> 运行 -> 观察 -> 调整。

核心概念(用最简单的话说明)

  • VU(虚拟用户):模拟并发用户的数量。
  • Iteration(迭代):每个 VU 执行脚本的一次完整流程。
  • Duration / Stages:持续时间或分阶段的负载变化。
  • Checks:断言,用来判断响应是否符合期望。
  • Thresholds:质量门槛,失败则测试判为失败(CI 用途)。
  • Metrics:内置(http_req_duration 等)与自定义指标。

如何安装 k6(快速上手)

k6 支持多平台,下面是常见安装方式,按你系统选一种即可。

  • macOS(Homebrew):brew install k6
  • Linux(Deb/Ubuntu):添加官方仓库后 apt install k6,或直接下载二进制。
  • Windows(Scoop/Chocolatey):scoop install k6 或 choco install k6
  • Docker:docker run -i loadimpact/k6 run – 用于容器化或 CI 环境

编写第一个 HelloWorld 脚本(一步一步)

k6 的脚本本质上是 JavaScript(ES6 风格),主函数名为 default。下面是最基础的示例,先看代码再解释。

import http from 'k6/http';
import { sleep, check } from 'k6';

export let options = {
  vus: 5,
  duration: '10s',
  thresholds: {
    'http_req_duration': ['p(95)<500'] // 95% 请求小于 500ms
  }
};

export default function () {
  let res = http.get('https://test.k6.io');
  check(res, { 'status is 200': (r) => r.status === 200 });
  sleep(1);
}

解释:

  • import:引入 http、sleep、check 等模块。
  • options:配置负载(此处 5 个 VU,持续 10 秒)与阈值。
  • default:每个 VU 重复执行的函数,通常包含请求与等待。

运行脚本

在命令行中运行:

k6 run hello.js

你会看到实时的控制台输出,包括 http_reqsvusdata_receivedhttp_req_duration 等。

常见 CLI 选项与输出说明

把常用选项和它们的含义放在一个表格里,方便查阅:

选项 用途
–vus / vus 并发虚拟用户数
–duration / duration 测试持续时间,如 30s、1m
–iterations 总迭代次数,适合固定请求数测试
–out 输出后端(influxdb、json 等)
–summary-export 导出测试摘要到 JSON 文件

从 HelloWorld 扩展到实战脚本

好,HelloWorld 能跑了,接下来考虑真实场景:登录、鉴权、参数化、并发场景切换、逐步加压(ramp-up/ramp-down)。

例子:带登录与参数化的脚本骨架

import http from 'k6/http';
import { check } from 'k6';

export let options = {
  stages: [
    { duration: '30s', target: 50 }, // ramp-up to 50 vus
    { duration: '1m', target: 50 },  // sustain
    { duration: '30s', target: 0 },  // ramp-down
  ],
  thresholds: { 'http_req_failed': ['rate<0.01'] }
};

export default function () {
  let login = http.post('https://api.example.com/login', { user: 'a', pass: 'b' });
  check(login, { 'login OK': (r) => r.status === 200 });
  let token = login.json('token');
  let res = http.get('https://api.example.com/data', { headers: { Authorization: `Bearer ${token}` } });
  check(res, { 'data ok': (r) => r.status === 200 });
}

指标与自定义指标(让数据更有用)

内置指标能满足大多数场景,但有时需要记录业务指标,例如“某接口返回特定值的次数”。这时使用自定义指标。

  • Counter:计数器,用于累加事件。
  • Trend:记录分布(如响应时间分布),可计算 p90、p95。
  • Gauge:即时值(如队列深度)。
import { Counter, Trend } from 'k6/metrics';
let errors = new Counter('my_errors');
let latency = new Trend('my_latency');

export default function () {
  let r = http.get('https://...');
  if (r.status !== 200) errors.add(1);
  latency.add(r.timings.duration);
}

在 CI 中使用 k6(给持续集成一把梯子)

思路其实很直接:把 k6 当作一个可执行的测试步骤,失败时返回非 0,成功则继续。关键点是把结果导出,便于在流水线中判断。

  • 使用 k6 run --summary-export=summary.json 导出 JSON 摘要。
  • 在脚本中设置 thresholds,超过阈值时 k6 返回非 0,CI 任务失败。
  • 如果需要长期可视化,把数据输出到 InfluxDB,再用 Grafana 展示。

可视化与持久化输出

常见组合是 k6 -> InfluxDB -> Grafana。另一个轻量做法是把 summary 导出为 JSON 或 CSV,供后续解析。

调试与常见问题(带解决建议)

  • 连接失败 / DNS 解析慢:确认网络环境,必要时在脚本中使用 hosts 或在被测环境使用稳定的 DNS。
  • 本机无法达到期望并发:检查 ulimit、端口耗尽(TIME_WAIT)、CPU 与网络带宽限制。
  • 测试环境与生产不一致:尽量在容量相近的环境跑测试,或使用 k6 cloud 分布式能力。
  • 误用浏览器特性:k6 不是真实浏览器,某些 JS 渲染或浏览器 API 不支持,要用 API 层面脚本。

性能调优小贴士(实用且容易被忽视)

  • 在本地测试前,先用很小的 VU、短时长跑通脚本,确认逻辑无误再扩容。
  • http.batch() 合并并发请求,模拟资源并行加载。
  • 把非关键的日志与大体积响应体过滤或不记录,避免 IO 成为瓶颈。
  • 对外部依赖(第三方 API)使用 mock,专注测试自家服务。
  • 为长期监控配置阈值:比如 p95、错误率、请求失败率等,接入告警。

典型场景与选型参考

下面是一组快速参考,帮助你在不同场景下选用 k6 的模式:

  • 短突发压力测试:使用高 VU 短时 duration 或 iterations。
  • 稳定持续负载:使用 stages 或 constant-arrival-rate 场景。
  • 合规阈值检查(CI):在 options 中设置 thresholds 并在流水线中检测返回码。

小表格:常见输出后端对比

后端 适合场景
influxdb 长期存储、Grafana 可视化
JSON 文件 CI 报告、单次导出分析
k6 cloud 分布式大规模测试与托管可视化

实践小案例:把 HelloWorld 扩成可复用模板

把常见逻辑抽成模块:请求模块、验证模块(checks)、辅助函数(getAuthToken)、配置模块(env、options)。这样团队成员只需按模板填入业务 URL 与断言即可复用。

常见误区再强调几条

  • 不要把 k6 的结果直接当作 SLA 的最终结论,测试结果需要结合监控(CPU、内存、GC、数据库性能)来看。
  • 不要只看平均值,p90、p95 更能反映用户体验。
  • 不要在生产流量上直接做高压测试,没有充足保护与沟通。

好了,既然把基本概念、示例、调优与 CI 实操都讲了,你可以从那段最简 HelloWorld 开始,逐步把认证、参数化、阈值、输出接入进来。边跑边看数据,遇到瓶颈先定位到是哪一层(网络、应用、数据库),然后再去针对性优化。若要进一步把结果做成长期可观测的指标,接入 InfluxDB + Grafana 或使用 k6 cloud 会省很多事。去写你的第一个脚本吧,运行一次、观察一次、改进一次,就像调乐器那样,慢慢就能弹出顺口的曲子来。

相关文章

了解更多相关内容

HelloWorld智能翻译软件 与世界各地高效连接