news 2026/10/3 7:16:15

Hey 压测工具 API 完整指南:requester.Work 结构体逐字段说明与调用示例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Hey 压测工具 API 完整指南:requester.Work 结构体逐字段说明与调用示例

Hey 压测工具 API 完整指南:requester.Work 结构体逐字段说明与调用示例

【免费下载链接】heyHTTP load generator, ApacheBench (ab) replacement项目地址: https://gitcode.com/GitHub_Trending/he/hey

hey是一款用 Go 编写的轻量级HTTP 压测工具,常被视为 ApacheBench(ab)的现代化替代品,支持高并发请求、QPS 限速、HTTP/2 与 CSV 输出。它的核心 API 全部收敛在 requester/requester.go 中的一个结构体:requester.Work。搞懂这个结构体的每个字段,你就掌握了用 Go 代码驱动 hey 做负载测试的全部能力 🚀。

hey 压测核心:Work 结构体是什么?

Work是一次压测任务的"总描述":要发什么请求、发多少、并发多少、限速多少、结果输出到哪里。命令行版本hey的工作流程非常简单——把-n、-c、-q等命令行参数一一翻译成Work字段,然后调用Run()执行(见 hey.go):

w := &requester.Work{ Request: req, // 请求模板 N: num, // 总请求数 C: conc, // 并发数 QPS: q, // 限速 Timeout: t, // 超时(秒) } w.Init() w.Run()

换句话说,命令行 hey 只是 Work 的一层壳。把它当作 Go 库引入自己的项目,就能做自定义的动态请求、嵌入式压测、自动化性能巡检。

requester.Work 字段逐字段说明 📊

字段类型含义对应 CLI 参数
Request*http.Request请求模板,每次压测克隆此请求发送URL、-m、-H等
RequestBody[]byte请求体字节,克隆请求时重新填充 Body-d/-D
RequestFuncfunc() *http.Request动态请求生成函数;非 nil 时优先于Request生效无(纯 API 能力)
Nint要发送的总请求数-n(默认 200)
Cint并发数(worker 数),每个 worker 负责N/C个请求-c(默认 50)
H2bool启用HTTP/2(自动调用http2.ConfigureTransport)-h2
Timeoutint单请求超时(秒),0 表示不限时-t(默认 20)
QPSfloat64限速:每个 worker每秒的请求数,0 为不限速-q
DisableCompressionbool关闭响应压缩--disable-compression
DisableKeepAlivesbool禁止复用 TCP 连接--disable-keepalive
DisableRedirectsbool不跟随 3xx 跳转--disable-redirects
Outputstring输出格式,填"csv"输出逐条指标流-o csv
ProxyAddr*url.URLHTTP 代理地址(host:port)-x
Writerio.Writer结果输出目标,nil 时写到 stdout—

⚠️ 注意:N与C有约束——N不能小于C(否则N/C整除后 worker 无事可做);而Timeout单位是秒而不是纳秒,和 Go 常规的time.Duration不一样,这是新手最容易踩的坑。

Work 的调用方式:三步跑起压测

第 1 步:Init() 初始化内部通道

requester.go 中的Init()会创建结果通道results(容量为min(C*1000, 1000000))和停止信号通道stopCh,内部用sync.Once保证只初始化一次,可放心重复调用。

第 2 步:Run() 阻塞执行

Run()的完整流程是:

  1. 先启动reporter协程,轮询结果通道、计算延迟分布与状态码统计(统计逻辑见 requester/report.go);
  2. 再启动C个 worker 协程并发发请求,每个请求用httptrace记录DNS 解析、建连、写请求、首字节响应各阶段耗时(requester.go);
  3. 全部完成后Finish()汇总并打印 summary。

第 3 步:Stop() 优雅停止

向stopCh发送C个停止信号,worker 会在当前请求结束后退出。CLI 版本用它实现了Ctrl+C 停止和-z 30s定时停止两个特性(hey.go),你也可以在自己的程序里同样用法。

进阶:用 RequestFunc 发动态请求 🎯

固定Request模板适合常规压测;如果你的接口需要每次请求变化参数(比如不同的用户 ID、令牌),就设置RequestFunc:

w := &requester.Work{ RequestFunc: func() *http.Request { req, _ := http.NewRequest("GET", "https://api.example.com/user/"+randID(), nil) return req }, N: 1000, C: 50, } w.Run()

执行时会走 makeRequest 的RequestFunc != nil分支,逐次调用生成函数,而不做请求克隆。

获取源码并验证

git clone https://gitcode.com/GitHub_Trending/he/hey cd hey go test ./requester/

官方自带了覆盖请求计数、QPS 限速、Header 透传、请求体等场景的测试用例,非常适合当作 API 用法示例来读,推荐从 requester/requester_test.go 开始。

相关文件速查

文件说明
requester/requester.goWork结构体定义与执行逻辑
requester/report.go延迟统计与结果报表
requester/print.go输出格式(summary / csv)
hey.go命令行入口,Work 的组装范例
requester/requester_test.goAPI 用法与行为验证用例

一句话总结:requester.Work= 请求模板(Request/RequestFunc)+ 规模(N、C)+ 限制(QPS、Timeout)+ 输出(Output、Writer)。字段全部赋值完毕后,Init()→Run()即可,需要提前终止再调Stop()。这就是 hey 压测库 API 的全部精髓 ✅

【免费下载链接】heyHTTP load generator, ApacheBench (ab) replacement项目地址: https://gitcode.com/GitHub_Trending/he/hey

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/3 7:16:02

deepseek rsi白皮书与海外

本交流为红杉美国在 Anthropic HQ 的被投公司闭门会,其中一个 Session。 主持人参与 Claude Platform 和 Claude Managed Agents,此前是 LangChain 早期工程师。嘉宾目前在 Anthropic 带队,让 Claude 自主开展预训练研究 ○ 一年前的判断已经…

作者头像 李华
网站建设 2026/10/3 7:15:59

Windows 12 新功能展望:AI 深度融合、全新界面与下一代生产力体验

Windows 12 目前还没有由微软正式确认完整发布时间和全部功能细节,因此以下内容更多是基于 Windows 系统发展趋势、AI PC 方向以及用户对下一代 Windows 的普遍期待所做的展望。对于普通用户来说,Windows 12 最值得关注的并不是单一功能,而是…

作者头像 李华
网站建设 2026/10/3 7:15:59

“done“的六项标准:apk-reverse的验证与声明阶梯深入解读

"done"的六项标准:apk-reverse的验证与声明阶梯深入解读 【免费下载链接】apk-reverse Suitable for Android APK reverse engineering analysis 项目地址: https://gitcode.com/gh_mirrors/ap/apk-reverse apk-reverse 是一套面向 Android APK 逆…

作者头像 李华
网站建设 2026/10/3 7:15:38

牛(原创诗)

混沌初开驭灵牛,形似猛虎性温和。雷蹄走遍万里路,角挑日月劳苦作。老子驭牛出函关,紫气东来万河山。神农百草有其助,悬壶济世为众生。商周鼎彝铸礼制,秦鞭未改青云志。汉轭血凝变洪荒,春雷秋雨不卸甲。君不…

作者头像 李华
网站建设 2026/10/3 7:15:28

Hey与100万结果上限:超大规模压测时report如何截断统计数据

Hey与100万结果上限:超大规模压测时report如何截断统计数据 【免费下载链接】hey HTTP load generator, ApacheBench (ab) replacement 项目地址: https://gitcode.com/GitHub_Trending/he/hey hey 是一个轻量级的 HTTP 压测工具(HTTP load gener…

作者头像 李华