
从curl到Hey如何把一个调试请求改造成可复用的压测用例【免费下载链接】heyHTTP load generator, ApacheBench (ab) replacement项目地址: https://gitcode.com/GitHub_Trending/he/heyHey 是一个开源的 HTTP 压测工具HTTP load generator定位是 ApacheBenchab的替代品。它能把你平时用 curl 调试好的单个请求改造成可复用的压测用例并发发压、限流、输出响应时间直方图和百分位延迟分布。为什么选择 hey 做压测工具相比 ApacheBenchhey 的优势在于上手快一条命令即可对指定 URL 发起压测默认 200 个请求、50 个并发 worker统计细内置响应时间直方图、百分位延迟分布、DNS/TCP/读写各阶段耗时贴近真实支持自定义请求头、POST body、Basic 认证、HTTP/2、限流 QPS轻量部署Go 语言编写无 CGO 依赖可直接编译或用 Docker 运行见 Dockerfile 与 Makefile如果你还没有安装可以克隆源码后自行构建git clone https://gitcode.com/GitHub_Trending/he/hey cd hey go build -o hey hey.go第一步把 curl 调试请求拆成三个部分假设你调试接口时常用的 curl 命令是这样的curl -X POST https://api.example.com/orders \ -H Content-Type: application/json \ -H Authorization: Bearer token \ -d {sku:A-101,qty:2}把它拆成三要素正好对应 hey 的参数组完整参数定义见 hey.gocurl 要素对应 hey 参数说明-X POST-m POST指定 HTTP 方法-H ...-H ...可重复自定义请求头-d {...}-d ...请求体内容内容类型-T默认text/htmlJSON 需改为application/json改造后的第一条 hey 压测用例hey -m POST \ -T application/json \ -H Authorization: Bearer token \ -d {sku:A-101,qty:2} \ -n 10 -c 2 \ https://api.example.com/orders 小贴士如果请求体是文件比如一大段 JSON用-D ./payload.json从文件读取比写在命令行更干净。第二步选择压测模式——总请求数还是持续时长hey 提供两种典型的压测方式固定请求数模式-n -c-n总请求数默认 200-c并发 worker 数默认 50注意-n不能小于-c适合回归验证、版本对比等需要「同样总量」的场景。固定时长模式-zhey -z 30s -c 50 https://api.example.com/orders按持续时间压测如 30 秒、3 分钟此时-n会被忽略。适合观察服务在持续流量下的稳定性。限流压测-q如果只想以 10 QPS/worker 的温和速率压测hey -q 10 -c 5 -z 30s https://api.example.com/orders更多可选项超时-t、HTTP/2-h2、代理-x等都在 README.md 的 Usage 一节里有完整说明。第三步看懂 hey 的输出报告压测结束后hey 会打印一份人类可读的摘要报告报告模板见 requester/print.go统计逻辑见 requester/report.goSummary总耗时、最快/最慢/平均响应时间、Requests/sec每秒处理请求数Response time histogram响应时间分布直方图肉眼就能看出延迟是「尖峰」还是「长尾」Latency distribution50% / 75% / 90% / 95% / 99% 等百分位延迟——排障时优先看 P99Details把单次请求拆成 DNS 解析、TCP 建连、请求写出、等待响应、读取响应五个阶段快速定位瓶颈在哪个环节Status code distribution状态码分布一眼发现 4xx/5xx 是否异常增多第四步把用例沉淀下来持续对比压测用例的价值在于复用。两个实用技巧1. 导出 CSV 便于二次分析hey -o csv -z 30s https://api.example.com/orders run1.csvCSV 每行包含单次请求的各阶段耗时与状态码方便和上一轮结果对比量化新版本改动的影响。2. 用 Docker 固定压测环境项目自带 Dockerfile构建出的镜像极小且免安装保证团队内压测环境一致docker build -t hey . docker run --rm hey -z 30s https://api.example.com/orders常见坑与注意事项 ⚠️-n小于-c会直接报错退出参数校验逻辑见 hey.go指定-z后-n失效别以为两者叠加生效发 JSON 时记得-T application/json默认内容类型是text/html可能导致服务端直接拒绝对生产环境压测请谨慎限流-q并先与相关团队确认避免误伤真实用户需要关闭 keep-alive 或跟随重定向时可用-disable-keepalive、-disable-redirects控制行为总结把 curl 调试请求改造成 hey 压测用例只需四步拆分要素方法、请求头、请求体对应-m、-H、-d选定模式总量模式-n -c或持续模式-z必要时加-q限流读报告关注 Requests/sec、P99 延迟和各阶段耗时分布沉淀复用-o csv留档对比Docker 固化环境一条命令即可从「调通了」走向「量得准」这就是 hey 作为 HTTP 压测工具的核心价值。【免费下载链接】heyHTTP load generator, ApacheBench (ab) replacement项目地址: https://gitcode.com/GitHub_Trending/he/hey创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考