k6:用写代码的方式做性能测试

Grafana 团队开源的 k6 项目,Star 数已经突破 3 万。这是一款面向开发者的性能测试工具,核心理念很简单:把性能测试当成写代码来做。

以前做性能测试,大家习惯用 JMeter 这类工具,拖拖拽拽配置一堆参数。k6 的思路完全不同,它用 JavaScript 写测试脚本,测试逻辑就是代码,可以直接放进 CI 流水线里跑。

图片

能做什么

k6 支持的协议覆盖面很广:HTTP、WebSocket、gRPC、浏览器测试,该有的都有。它的 JavaScript 引擎是用 Go 写的,性能比 Node.js 高出一截,单台机器就能模拟大量并发用户。

测试脚本的写法很直观。定义虚拟用户数、持续时间、目标地址,然后写检查逻辑。比如:

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

export const options = {
  stages: [
    { duration: "30s", target: 15 },
    { duration: "1m", target: 15 },
    { duration: "20s", target: 0 },
  ],
};

export default function () {
  let res = http.get("https://example.com");
  check(res, { "status was 200": (r) => r.status == 200 });
  sleep(1);
}

这段脚本做了一件事情:先用 30 秒把并发用户从 0 拉到 15,保持 1 分钟,再用 20 秒降到 0。每次请求检查返回状态码是不是 200。

测试结果可以导出到 InfluxDB、Prometheus、Grafana 等监控系统,也可以直接看终端输出的统计摘要。

为什么选 k6

性能测试工具不少,k6 能跑出来有几个原因。

第一,门槛低。 会写 JavaScript 就能上手,不需要学新的 DSL 或者 XML 配置。对于前端和全栈开发者来说,几乎没有学习成本。

第二,适合自动化。 测试脚本就是代码,天然支持版本控制和 CI 集成。GitHub Actions、GitLab CI、Jenkins 都能直接跑。每次发版前跑一轮性能测试,发现问题及时修。

第三,可扩展性强。 k6 有扩展生态,社区贡献了很多插件。需要测新的协议或者对接特定的服务,装个扩展就行。

图片

第四,配置灵活。 虚拟用户数、请求速率、测试时长这些参数都能精细控制。想模拟真实用户的访问模式,用它的场景功能可以定义多种负载模型:固定用户数、逐步递增、恒定 RPS 等等。

实际用起来怎么样

k6 的文档写得很全,从入门到高级用法都覆盖了。安装也简单,macOS、Linux、Windows 都有对应的安装方式,Docker 镜像也有。

跑测试的时候,终端会实时显示当前的请求速率、响应时间、错误率。测完之后会输出一份完整的报告,包含各个指标的百分位数。

如果不想写代码,k6 团队还出了一个桌面工具 k6 Studio,可以图形化地录制和生成测试脚本。对于不熟悉代码的测试人员来说是个补充方案。

值不值得用

如果你的团队已经在用 Grafana 做监控,k6 的集成会很顺畅。测试结果直接关联到监控面板上,性能瓶颈一目了然。

对于需要定期做性能回归测试的项目,k6 的自动化能力能省不少事。脚本写好之后,每次跑就行了,结果自动存档。

这工具解决的是一个具体问题:让性能测试变得可重复、可自动化、可版本控制。做到了这三点,其他都是锦上添花。

行了,结果自动存档。

这工具解决的是一个具体问题:让性能测试变得可重复、可自动化、可版本控制。做到了这三点,其他都是锦上添花。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐