🧭 决策指南
为什么现在热: 无法从材料判断
适合,如果你
-
你要给 HTTP Web 应用发送固定请求数或持续 30 秒的负载README「Usage」支持 -n 和 -z;「Examples」包含 hey -z 30s https://google.com
-
你需要用 100 个并发 worker 发送 1000 个请求README「Examples」原文为 hey -n 1000 -c 100 https://google.com
-
目标 endpoint 使用 HTTP/2,或请求需要 POST body 与自定义 headerREADME「Usage」列出 -h2、-d、-H;「Examples」包含 POST、Bearer token 和 HTTP/2 示例
不适合,如果你
-
你的运行环境不是 README 列出的 Linux、macOS 或 Windows amd64README「Installation」只列出 Linux (amd64)、macOS (amd64)、Windows (amd64) 下载项
-
你需要除 summary 或 CSV 之外的输出格式README「Usage」说明 -o 的唯一支持替代格式是 csv
-
你要让请求总数小于并发数,例如 -n 10 -c 50README「Usage」明确说明 total number of requests cannot be smaller than the concurrency level
前置条件
- 需要 Linux (amd64)、macOS (amd64) 或 Windows (amd64) 二进制环境
- 可在 macOS 使用 Homebrew 命令 brew install hey
- 目标应是可通过 URL 访问的 Web application 或 HTTP/2 endpoint
第一步命令(README 原文)
hey https://google.com
要注意
-
使用 -z 时 n 会被忽略,时长到达后程序停止并退出README「Usage」对 -z 的说明
-
重复使用 -H 才能传多个 header,例如 Accept 和 Content-TypeREADME「Usage」-H 说明及自定义 header 示例
-
-q 按每个 worker 限制 QPS,不是整个 hey 进程的总 QPSREADME「Usage」将 -q 定义为 queries per second per worker
-
默认启用 keep-alive;关闭需显式使用 -disable-keepaliveREADME「Usage」列出 -disable-keepalive 并说明其作用
替代方案
-
ApacheBench (ab):当现有压测流程明确要求 ApacheBench (ab) 时,使用 README 所称的原有对照工具README 核心描述与开头说明
材料未说明
- README 未说明响应统计包含哪些具体指标,例如延迟分位数或错误率
- README 未说明 ARM、Linux 非 amd64 或其他架构是否有可用构建
- README 未说明 v0.1.5 相比此前 4 个版本的具体变更
- README 未说明 20,477 颗星和 2026-09-30 Trending 上榜是否由某个新功能或发布事件驱动
- README 未说明认证信息、Bearer token 和请求 body 在日志或 CSV 中的处理方式
- README 未说明目标 URL 的 TLS、重定向和代理行为在各平台上的具体兼容范围
💡 深度解析
6
适合:hey 原生支持持续时间模式和每个 worker 的 QPS 限制,但总速率需要按 worker 数量理解。
我需要对预发布 HTTP 服务持续 30 秒施压,并把目标速率设为每个 worker 10 QPS、共 5 个 worker;hey 的 `-q` 和 `-z` 能否表达这个负载模型?
适合:hey 原生支持持续时间模式和每个 worker 的 QPS 限制,但总速率需要按 worker 数量理解。
-z指定运行时长,README 明确说明达到时长后程序停止,且此时-n会被忽略。-q的单位是每个 worker 的 QPS;README 示例-q 10 -c 5 -z 30s正好对应每 worker 10 QPS、5 个 worker、持续 30 秒的模型。-c控制并发 worker,因此目标总速率不是简单把-q当作全局限速。
这种方式适合预发布容量验证和持续负载观察。README 没有保证实际速率一定精确达到理论值,也没有提供服务端限流、告警或监控集成;响应时间和调度仍可能影响实际吞吐。
- Usage:`-q Rate limit, in queries per second (QPS) per worker`
- Usage:`-z Duration of application to send requests`,以及 `n is ignored`
- Examples:`hey -q 10 -c 5 -z 30s https://google.com`
hey -q 10 -c 5 -z 30s https://google.com
适合:它直接提供并发 worker、请求总数和汇总统计,定位就是 ApacheBench 的轻量替代品。
我维护一个 Go 编写的 HTTP 服务,通常只需要比较 GET 接口在 50 到 100 个并发下的延迟;hey 能否替代 ApacheBench 完成这类验证?
适合:它直接提供并发 worker、请求总数和汇总统计,定位就是 ApacheBench 的轻量替代品。
-n控制请求总量,-c控制并发 worker,README 的示例明确展示了-n 1000 -c 100。- 默认执行后打印统计结果,能够覆盖基础吞吐和延迟比较;也可用
-o csv导出响应指标。 - 项目是 Go 编写的独立命令行程序,并提供 Linux、macOS、Windows amd64 二进制,部署成本低。
它不等于完整性能平台:README 没有说明分布式执行、复杂业务流程或服务端指标采集能力。若你的验证只是单 URL 的基础 HTTP 压测,匹配度较高;若要模拟多步骤用户流程,则需要其他工具。
- 项目描述:HTTP load generator, ApacheBench (ab) replacement
- Usage:`-n`、`-c`、`-o csv`
- Examples:`hey -n 1000 -c 100 https://google.com`
- Installation:Linux、macOS、Windows amd64 可执行文件
hey -n 1000 -c 100 https://google.com
适合:hey 支持 POST、自定义请求头和字符串或文件形式的请求体,能够覆盖这种单请求模板。
我正在测试一个需要 POST、`Content-Type: application/json` 和自定义 Authorization 请求头的 HTTP API;我能否只用 hey 构造这类请求?
适合:hey 支持 POST、自定义请求头和字符串或文件形式的请求体,能够覆盖这种单请求模板。
-m支持POST,因此可以显式指定方法而不是使用默认 GET。-H可重复传入多个请求头,README 示例同时展示了Accept: application/json和Authorization: Bearer token。-d可直接传字符串请求体,-D可从文件读取请求体;-T用于设置 Content-Type。
因此固定 JSON 内容的接口回归、基础吞吐测试和鉴权头验证都可执行。不过 README 明确列出的认证选项是 Basic authentication,Bearer token 只是通过普通请求头传入;没有说明动态 Token 刷新、参数化数据集或每次请求生成不同 body 的能力。
- Usage:`-m HTTP method`,支持 POST
- Usage:`-H Custom HTTP header`、`-d HTTP request body`、`-D HTTP request body from file`、`-T Content-type`
- Examples:`-H "Authorization: Bearer token"`
- Usage:`-a Basic authentication, username:password`
hey \
-m POST \
-d "param1=value1¶m2=value2" \
https://google.com
适合:它提供对应平台的独立二进制和 CSV 输出,足以作为基础 CI 测试步骤。
我想在 Linux amd64 或 macOS amd64 的 CI 中运行固定请求数的 API 基准测试,并把每次响应指标保存下来;hey 是否适合接入流水线?
适合:它提供对应平台的独立二进制和 CSV 输出,足以作为基础 CI 测试步骤。
- Installation 章节列出 Linux amd64 和 macOS amd64 下载地址,也支持 macOS Homebrew 安装。
-o csv是 README 明确支持的输出方式,会导出响应指标,便于后续脚本读取或保存。-n和-c可把测试规模写入 CI 命令,默认还会打印汇总结果。- Go 项目以独立命令行程序交付,不要求部署完整服务平台。
它更适合生成原始测试数据,而不是直接提供完整质量门禁。README 只列出 summary 和 CSV,没有说明 JUnit、HTML 报告、阈值断言、趋势图或 CI 平台插件;这些判断和可视化需要流水线自行实现。
- Installation:Linux amd64、macOS amd64 下载地址及 Homebrew
- Usage:`-o Output type`,`"csv" is the only supported alternative`
- Usage:`hey runs provided number of requests ... and prints stats`
- 项目数据:主语言 Go;最新版本 v0.1.5;Apache License 2.0
hey -n 1000 -c 100 https://google.com
适合:hey 同时提供代理地址、自定义 Host 头和 Linux amd64 二进制,适合单 URL 路由验证。
我需要在 Linux amd64 主机上经由 HTTP 代理访问测试环境,并设置自定义 Host 头来验证路由;hey 能否覆盖这个部署验证场景?
适合:hey 同时提供代理地址、自定义 Host 头和 Linux amd64 二进制,适合单 URL 路由验证。
-x接受host:port格式的 HTTP Proxy address,可将请求指向指定代理。-host用于设置 HTTP Host header,能够验证基于 Host 的虚拟主机或路由规则。- Installation 章节直接提供 Linux amd64 二进制,不需要在目标主机部署额外平台组件。
-t可设置单请求超时,-disable-redirects可关闭重定向跟随,有助于观察部署入口的原始响应行为。
限制在于 README 没有说明代理认证、HTTPS CONNECT 的具体支持方式、SOCKS 代理或多目标路由编排。如果验证需要代理用户名密码、复杂证书链或多个服务之间的业务流程,单个 hey 命令不能从 README 得到完整保证。
- Usage:`-x HTTP Proxy address as host:port`
- Usage:`-host HTTP Host header`
- Usage:`-t Timeout for each request`、`-disable-redirects`
- Installation:`Linux (amd64)`
hey https://google.com
视情况:hey 提供 HTTP/2 开关,但是否真正使用 HTTP/2 取决于目标端点和客户端环境的协商结果。
我的服务提供 HTTP/2 端点,我想用同一个命令行工具发送并发请求并验证 HTTP/2 路径;hey 的 `-h2` 是否足够?
视情况:hey 提供 HTTP/2 开关,但是否真正使用 HTTP/2 取决于目标端点和客户端环境的协商结果。
- README 明确写明 hey 支持 HTTP2 endpoints,并提供
-h2 Enable HTTP/2选项。 - HTTP/2 测试仍可结合
-n、-c或-z,因此并发请求和固定时长负载模型不需要更换工具。 - 项目同时支持自定义 Host、超时、代理和连接行为选项,可用于部分端点配置验证。
但 -h2 只是启用客户端侧选项,不代表目标一定按 HTTP/2 处理请求。README 没有说明 ALPN/TLS 协商细节、明文 h2c 支持、HTTP/2 连接复用的统计方式,也没有提供协议版本确认字段;因此它适合发起测试,不足以单独证明协议协商结果。
- README 开头:`It also supports HTTP2 endpoints.`
- Usage:`-h2 Enable HTTP/2`
- Usage:`-n`、`-c`、`-z`、`-host`、`-x`、`-t`
hey -h2 https://google.com
✨ 核心亮点
-
支持 HTTP/2、POST、代理与自定义请求头
-
用 -n、-c、-z 控制请求数、并发和时长
-
提供 Linux、macOS、Windows amd64 二进制
-
ApacheBench 替代品,社区已有 20,477 颗星
🔧 工程化
-
hey 发送指定数量请求并输出 HTTP 统计信息
-
支持 -n 请求数、-c 并发 worker 与 -q QPS 限速
-
支持 GET、POST、PUT、DELETE 等 HTTP 方法
-
可用 -o csv 导出响应指标,唯一替代输出格式是 CSV
⚠️ 风险
-
默认仅发送 200 请求并使用 50 个并发 worker
-
README 要求请求总数不能小于 -c 并发数
-
单请求默认超时 20 秒,-t 0 才表示无限等待
-
仅列出 amd64 二进制,未列出 ARM 架构构建物
👥 适合谁?
-
需要快速压测 HTTP Web 应用的 Go 或 Web 开发者
-
需要验证 HTTP/2 endpoint、POST body 或 Bearer token 的团队
-
使用 Linux、macOS 或 Windows amd64 的工程师