
Hey 压测工具 API 完整指南requester.Work 结构体逐字段说明与调用示例【免费下载链接】heyHTTP load generator, ApacheBench (ab) replacement项目地址: https://gitcode.com/GitHub_Trending/he/heyhey是一款用 Go 编写的轻量级HTTP 压测工具常被视为 ApacheBenchab的现代化替代品支持高并发请求、QPS 限速、HTTP/2 与 CSV 输出。它的核心 API 全部收敛在 requester/requester.go 中的一个结构体requester.Work。搞懂这个结构体的每个字段你就掌握了用 Go 代码驱动 hey 做负载测试的全部能力 。hey 压测核心Work 结构体是什么Work是一次压测任务的总描述要发什么请求、发多少、并发多少、限速多少、结果输出到哪里。命令行版本hey的工作流程非常简单——把-n、-c、-q等命令行参数一一翻译成Work字段然后调用Run()执行见 hey.gow : 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/-DRequestFuncfunc() *http.Request动态请求生成函数非 nil 时优先于Request生效无纯 API 能力Nint要发送的总请求数-n默认 200Cint并发数worker 数每个 worker 负责N/C个请求-c默认 50H2bool启用HTTP/2自动调用http2.ConfigureTransport-h2Timeoutint单请求超时秒0 表示不限时-t默认 20QPSfloat64限速每个 worker每秒的请求数0 为不限速-qDisableCompressionbool关闭响应压缩--disable-compressionDisableKeepAlivesbool禁止复用 TCP 连接--disable-keepaliveDisableRedirectsbool不跟随 3xx 跳转--disable-redirectsOutputstring输出格式填csv输出逐条指标流-o csvProxyAddr*url.URLHTTP 代理地址host:port-xWriterio.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()的完整流程是先启动reporter协程轮询结果通道、计算延迟分布与状态码统计统计逻辑见 requester/report.go再启动C个 worker 协程并发发请求每个请求用httptrace记录DNS 解析、建连、写请求、首字节响应各阶段耗时requester.go全部完成后Finish()汇总并打印 summary。第 3 步Stop() 优雅停止向stopCh发送C个停止信号worker 会在当前请求结束后退出。CLI 版本用它实现了CtrlC 停止和-z 30s定时停止两个特性hey.go你也可以在自己的程序里同样用法。进阶用 RequestFunc 发动态请求 固定Request模板适合常规压测如果你的接口需要每次请求变化参数比如不同的用户 ID、令牌就设置RequestFuncw : 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 / csvhey.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),仅供参考