k6 2.3.0:开源压测工具,JavaScript 脚本,阈值决定流水线过不过
摘要
k6 是 Go 引擎的开源压测工具,脚本用 JavaScript 或 TypeScript 写,阈值不达标即判失败,结果可进 Grafana 看板,最新 2.3.0。
推荐- 软件名称
- k6
- 版本
- 2.3
- 收费
- 免费
- 开源
- 开源
- 操作系统
- WindowsLinuxmacOS
- 更新时间
- 2026-10-21 12:40
k6 是一个开源负载测试工具,引擎用 Go 写,测试脚本用 JavaScript 或 TypeScript 写。它把性能测试当成软件工程的一部分:脚本进代码仓库,阈值写进脚本,跑完给出通过或失败的结论,直接接在流水线上。
一个可执行文件,一份脚本
k6 的分发形式与命令行工具一样:Linux 的 deb、rpm 与 tar 包,macOS 的 x64 与 arm64 压缩包,Windows 的 msi 与 zip,一个可执行文件放进环境就能跑。项目由 Grafana Labs 维护,2016 年起步,2021 年随创业公司一起并入 Grafana Labs,授权是 GNU AGPL 第三版。
脚本是一个 JavaScript 模块,导出的默认函数就是每个虚拟用户要执行的一轮;配置写在 options 对象里,也可以从命令行覆盖。TypeScript 同样能写。引擎本身是 Go,单个进程能用很少的内存拉起大量虚拟用户,这是它一直在强调的地方。

阈值:把 SLO 写成判据
阈值是这个工具和「跑一遍看看」的分界线。它给指标定一条通过线,测试结束时不满足就返回失败状态。文档举的例子很具体:错误率低于百分之一、百分之九十五的请求响应时间低于两百毫秒、百分之九十九低于四百毫秒、某个特定端点始终在三百毫秒以内,自定义指标同样能设阈值。
因为退出码会跟着变,阈值就成了流水线里的开关。官方给的自动化三步是:先给测试写阈值,再把执行自动化,最后为失败配告警——之后只在系统没达标时才需要人插手。
检查:不中止的断言
检查验的是布尔条件,比如状态码是不是 201、响应体大小对不对。它和多数测试框架里的断言长得像,但有个关键区别:检查失败不会让测试中止,也不会让整轮判定为失败,它只把失败率记成一个指标。
想让检查真正拦住流程,得和阈值配对:检查负责记录事实,阈值负责下结论。这个分工让一次压测既能收集全部异常样本,又能在收尾时给出一个明确的是非。
场景:一场测试里跑几种流量
场景描述虚拟用户和迭代怎么调度。同一个脚本里可以声明多个场景,每个跑不同的函数、用不同的执行器,彼此独立并行;把各场景的开始时间错开,就能排出先后顺序。每个场景还能单独挂环境变量与标签,结果汇总时按标签切开看。
这套机制对应的是真实流量的形状:稳态的固定并发、逐步加压的爬坡、按到达率而不是并发数施压、以及尖峰与浸泡。压测脚本因此不必为每种形态重写一份。
协议与扩展
开箱支持的协议有四个:HTTP/1.1、HTTP/2、WebSocket 与 gRPC。HTTP/2 是自动升级的——先按 HTTP/1.1 连,服务端声明支持就换过去,脚本不用改。
要测别的协议得自己编一个二进制。项目提供一个叫 xk6 的构建工具,社区已经用它接上了 SQL、Kafka、ZeroMQ、Redis 这些协议。扩展分四类:JavaScript 扩展给脚本加接口,输出扩展把指标送到自定义格式或服务,密钥扩展负责给测试提供凭据,子命令扩展在 k6 的命名空间下加自定义命令。
结果去哪儿
默认跑完打一份收尾汇总,给的是聚合统计。要细到每个数据点,可以打开实时流式输出,写进 JSON 文件或者直接推给后端。官方列出的落点包括 Prometheus、Mimir、Datadog、New Relic、Timescale 这类时序与分析系统,也能用内置的网页看板现场看曲线。
这条链路和 Grafana 的定位接得很紧:k6 造的是合成流量,Grafana 那边收的是指标、日志与链路,两边拼起来就是「上线前主动压一遍」和「上线后被动看真实流量」的同一条时间线。
2.x 改了什么
2.0 是一次清理:把长期废弃的命令与参数摘掉,Go 模块路径换成带 v2 的新地址,所有扩展都得跟着改导入路径。这是会打断兼容的升级,发布说明里写得很清楚。
2.3.0(2026 年 9 月 21 日)加的东西偏实用:一个 --scenario 参数,不改编脚本就能只跑测试里的某几个场景;一个 --once 参数,让压测脚本可以直接当冒烟测试和功能测试用;异步分组的实验性支持,让指标在 await 之后仍归到正确的组里。另有一条 1.8.2(10 月 12 日)只修依赖里的安全问题、不添功能——两条版本线并行,一条往前走,一条只打补丁。
谁适合用它
已经在用 Grafana 那套可观测性栈的团队,接 k6 几乎没有摩擦:指标能进同一套存储,看板也能共用。习惯把测试写进代码仓库的开发者会觉得它比图形化压测工具顺手——脚本能评审、能复现、能进流水线。
反过来,只想临时压一下接口看个数字,命令行加一份几十行的脚本仍然是最短路径;但它没有可视化编排界面,也不打算做。它的假设是:性能测试和单元测试一样,应该由写代码的人来写。
k6 把性能测试往「代码」这一侧拉:脚本是代码,判据是代码里的阈值,结论是进程退出码。Go 引擎用尽量少的资源造出流量,Grafana 那套后端把流量变成能看的曲线。项目 2016 年起步、2021 年并入 Grafana Labs、仓库三万一千多颗星、授权 AGPL 第三版,走的是「像单元测试那样测性能」这条路。