
让系统扛住压力k6 负载测试从首脚本到 CI 回归的实战指南【免费下载链接】k6A modern load testing tool, using Go and JavaScript项目地址: https://gitcode.com/GitHub_Trending/k6/k6大促前业务方问了一句“1万并发时系统会不会卡”旧答案是手动点一点、跑个临时脚本结果不可复现数字没人信下次发版又从零开始。k6 是一个用 Go 编写的现代开源负载测试工具它把压测当代码来做用 JavaScript 写测试脚本一条命令模拟并发流量跑完输出响应时间、错误率、吞吐量的完整报告。对开发和测试工程师来说k6 性能测试的价值在于让压测可复现、可评审、可反复回归。快速上手30 秒跑通第一个 k6 性能测试安装很轻Linux 下载单二进制放进 PATH 即可macOS 用 brew 也行。想读源码的话先克隆仓库git clone https://gitcode.com/GitHub_Trending/k6/k6然后写第一个脚本 test.jsimport http from k6/http; import { check, sleep } from k6; export const options { stages: [ { duration: 30s, target: 50 }, // 爬到 50 并发 { duration: 1m, target: 50 }, // 保持 { duration: 20s, target: 0 }, // 收住 ], thresholds: { http_req_duration: [p(99) 800], // P99 延迟必须低于 800ms }, }; export default function () { const res http.get(https://api.example.com/health); check(res, { status 是 200: (r) r.status 200 }); sleep(1); }执行k6 run test.js结束时会输出汇总表总请求数、RPS、平均/P95/P99 延迟、阈值是否通过。两个细节值得注意其一阈值一旦不达标进程就以非零退出码结束CI 直接拿它判定成败其二上面的 stages 是“爬升—保持—收住”的曲线不是一上来就猛冲对被测系统更友好。仓库里 examples 目录还有 HTTP、WebSocket、阈值等更完整的样例。 k6 三个核心能力怎么用JavaScript 脚本化测试即代码解决的是“学新工具”的问题。脚本就是普通 JS可以 import 复用业务模块——登录取 token、构造测试数据都能抽成函数共享脚本进 Git 仓库走 code review接口变更后改脚本就行不用重新培训谁操作可视化工具。阈值断言把 SLO 写成代码解决的是“压测过没过”的问题。阈值直接写在脚本里比如p(99) 800表示 P99 必须小于 800ms还能按 tag 过滤只对某个接口断言。它不是报告里一句话的软目标而是硬判定不达标测试就失败退出码告诉 CI。写法可参考 阈值示例脚本里面有全局阈值和按 tag 过滤两种形式。多协议与分布式执行解决的是“协议受限”和“单机压不动”的问题。k6 原生支持 HTTP、WebSocket、gRPC 和浏览器协议实时课堂这类 WebSocket 场景用同一套脚本就能测。单机不够时走 Kubernetes 上的 coordinator agent 模式协调者负责调度和指标汇总各节点 agent 分摊压测流量设计细节见仓库里的分布式执行设计文档。 两种实战打法API 网关压测目标找到网关的真实容量上限和瓶颈接口。做法把核心链路登录 → 列表 → 详情写成脚本用 ramping 曲线分阶段加压盯每一阶段的 P95/P99 增长曲线和错误率。判断标准目标 QPS 下 P99 稳定在 SLO 内、错误率接近 0 即通过某阶段 P99 曲线陡增那个并发量就是饱和点把它记下来这就是你要报给团队的容量数字。CI 性能回归目标让性能不随发版悄悄退化。做法写一个一分钟左右的小流量“冒烟压测”并发 50~100配好阈值挂在每次 PR 或每日构建上退出码即判定。判断标准阈值挂了合并红灯。大压力不用天天跑——发版前、大促前各跑一次完整压测CI 里跑的是轻量版。⚠️ 避坑清单别直接压生产环境哪怕是小流量独立测试环境加测试数据是底线。别看平均延迟下结论均值掩盖长尾问题看 P95/P99同时看错误率。先确认压测机自身没跑满 CPU否则测出来的是你自己机器的极限。用 stages 曲线爬坡一上来拉满并发会把冷启动误判成系统故障。阈值必须写进脚本靠口头约定的“上次还行”不会留下来。登录、token 等状态逻辑抽成模块复用别在每个脚本里重写一遍。今天就能做的三件事装好 k6从 examples 里挑一个脚本改成自己的服务跑一次小压力测试。在脚本里写一条 P99 阈值让测试“该挂的时候会挂”。把脚本挂进 CI每次 PR 跑冒烟压测把性能变成合并标准的一部分。【免费下载链接】k6A modern load testing tool, using Go and JavaScript项目地址: https://gitcode.com/GitHub_Trending/k6/k6创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考