3分钟跑通 k6:用 JavaScript 写性能压测脚本
2026/9/3 10:31:59 网站建设 项目流程

3分钟跑通 k6:用 JavaScript 写性能压测脚本

【免费下载链接】k6A modern load testing tool, using Go and JavaScript项目地址: https://gitcode.com/GitHub_Trending/k6/k6

k6 是一个用 JavaScript 写脚本的性能压测工具,由 Go 编写内核,把 Go 的执行效率和 JS 的易上手结合起来。你可以像写单元测试一样写压测脚本,控制并发曲线、断言响应时间。装好后一条命令就能对任意 HTTP 接口发起模拟流量测试。

它解决了什么问题

想象这样一个场景:大促前你要给下单接口做压测。传统工具的配置往往又重又不透明,脚本不好进代码仓库,团队协作全靠口头传递。更头疼的是压测结果全靠人肉盯日志,响应变慢了没人报警。

k6 的思路是把压测脚本当成代码:用熟悉的 JavaScript 描述用户行为,脚本进 Git、跑 CI、可复用。压测目标直接写成阈值断言,不达标就失败。压测从此和单元测试一样,有了版本和自动判定。

获取与启动

推荐用 Go 安装命令行工具,没有 Go 环境就从官方 Release 页面下二进制包。

go install go.k6.io/k6/v2@latest # 或从 Release 页面下载 k6 run examples/http_get.js # 跑仓库自带示例脚本

跑完会打印请求耗时、状态码分布和阈值检查结果。看到这些数字输出,说明环境没问题。

核心能力拆解

用 JavaScript 定义压测逻辑

脚本就是一个 JS 文件,导入内置模块即可发请求、做断言。

import http from 'k6/http'; export default function () { http.get('https://example.com'); };

这对你意味着什么:脚本能进 Git、能在 CI 里跑,逻辑可复用、可评审。压测配置从此不再散落。

用 stages 控制压力曲线

在 options 里把压力拆成若干阶段,逐步加压或减压。

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

这对你意味着什么:能模拟流量突增的曲线,而不是一下子全量打过去。找到系统真实的拐点。

用 thresholds 自动判定结果

把性能目标写成断言,测试跑完自动给出通过与否。

thresholds: { http_req_duration: ['p(99) < 3000'], },

这对你意味着什么:压测能像单元测试一样接入 CI。响应变慢直接拦截,不用人肉盯盘。

分布式放大压力

单机打不够时,用--execution-segment把压力切段,多台机器各跑一段。

k6 run --execution-segment=1/2 script.js

这对你意味着什么:压力可以横向放大。仓库内 分布式执行设计文档 讲了 Coordinator 如何协调多个 Agent。

一个完整跑通的例子

把压测配置、用户行为、断言放进一个脚本:

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 }, ], thresholds: { http_req_duration: ['p(99) < 3000'] }, }; export default function () { let res = http.get('https://quickpizza.grafana.com'); check(res, { 'status was 200': (r) => r.status == 200 }); sleep(1); }

然后执行k6 run script.js,约 100 秒后得到完整报告:

刚才发生了什么:压测按三阶段执行,虚拟用户 30 秒内升到 15 个并发,保持 1 分钟后 20 秒内降回 0。每个"用户"每轮请求一次并校验状态码,sleep 模拟浏览间隔。结束时 k6 核对阈值,p(99) 超标则整场判为失败。

常见坑:阈值不满足时进程退出码非 0,正好适合 CI 直接拦截。想看细节可以加--summary-export=out.json,把汇总结果导出做二次分析。

继续深入

  • 仓库 examples/ 目录有大量脚本,覆盖 HTTP、gRPC、WebSocket、浏览器,照着抄最快。
  • 分布式压测的 Coordinator/Agent 模型可以看 架构设计文档。
  • 想看结果可视化,examples/docker-compose/influxdb-v1/ 给了 InfluxDB 加 Grafana 看板的完整 docker-compose 配置。

有具体问题就先去 examples 里找最接近你场景的脚本改,祝压得顺利。

【免费下载链接】k6A modern load testing tool, using Go and JavaScript项目地址: https://gitcode.com/GitHub_Trending/k6/k6

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询