告别“慢吞吞”:用 oha 让你的 HTTP 请求“飞”起来!
还在为测试 HTTP 接口的性能而烦恼吗?还在用那些笨重的工具吗?是时候认识一下 oha 了!这个用 Rust 编写的开源小工具,能让你像玩游戏一样轻松搞定 HTTP 压力测试,而且还自带炫酷的实时 TUI 界面,简直是程序员的福音!
一、什么是 oha?
oha,日语“おはよう”(早上好)的意思,正如其名,它是一个小巧、快速的 HTTP 负载生成器。灵感来源于 rakyll/hey,并由 tokio 和 ratatui 驱动。它不仅速度快,而且功能强大,支持跨平台(Linux、Windows、macOS),还可选支持 native-tls 和 vsock。更重要的是,它有一个实时 TUI 界面,让你随时掌握测试进度,就像在玩一个实时战略游戏一样!
1. 主要特性
- 实时 TUI 显示: 告别黑乎乎的命令行,实时查看测试数据,一目了然。
- Tokio 和 Ratatui 驱动: 性能与美观兼得,充分发挥 Rust 的强大力量!
- 跨平台支持: 不论你使用什么操作系统,都能轻松运行。
- 可选支持 native-tls 和 vsock: 满足你各种高级需求。
- JSON 输出支持: 方便进行数据分析。
- 突发模式和动态 URL 生成: 模拟真实场景,测试更加精准。
- 从文件读取 URL: 批量测试,效率翻倍。
- 延迟校正: 避免协同省略问题,确保测试结果更可靠。
- 将成功请求写入 SQLite 数据库: 方便后续分析。
二、如何部署 oha?
oha 的部署方式非常多样,总有一款适合你:
1. Cargo 安装
如果你是 Rust 爱好者,可以直接使用 Cargo 安装:
cargo install oha
# 或者使用 rustls 功能:
cargo install --no-default-features --features rustls oha
# 或者使用 vsock 功能:
cargo install --features vsock oha
2. 其他安装方式
- Arch Linux: pacman -S oha
- macOS (Homebrew): brew install oha
- Windows (winget): winget install hatoo.oha
- Debian (Azlux's repository): 请参考原文说明。
- X-CMD (Linux, macOS, Windows WSL/GitBash): x env use oha
- 容器化: Docker 镜像也已就绪,随时待命!
3. PGO 优化
如果你追求极致性能,可以使用 PGO (Profile-Guided Optimization) 进行构建:
bun run pgo.js
三、如何使用 oha?
oha 的使用非常简单,只需一条命令即可开始测试:
oha [OPTIONS] <URL>
1. 常用选项
- -n <N_REQUESTS>: 请求数量 (默认: 200)
- -c <N_CONNECTIONS>: 并发连接数 (默认: 50)
- -p <N_HTTP2_PARALLEL>: HTTP/2 并行请求数 (默认: 1)
- -z <DURATION>: 测试持续时间 (例如: -z 10s, -z 3m)
- -q <QUERY_PER_SECOND>: 每秒请求数 (QPS)
- --burst-delay <BURST_DURATION>: 突发请求之间的延迟
- --burst-rate <BURST_REQUESTS>: 突发请求的速率 (默认: 1)
- --rand-regex-url: 使用正则表达式生成 URL
- --urls-from-file: 从文件读取 URL
- --latency-correction: 延迟校正,避免协同省略
- --no-tui: 禁用实时 TUI
- -j, --json: 以 JSON 格式输出结果
- -m, --method <METHOD>: HTTP 方法 (例如: -m POST) (默认: GET)
- -H <HEADERS>: 自定义 HTTP 头 (例如: -H "foo: bar")
- -t <TIMEOUT>: 请求超时时间
- -d <BODY_STRING>: HTTP 请求体
- -D <BODY_PATH>: 从文件读取 HTTP 请求体
- -T <CONTENT_TYPE>: Content-Type 头
- -a <BASIC_AUTH>: 基本认证或 AWS 凭证
- --aws-session <AWS_SESSION>: AWS 会话令牌
- --aws-sigv4 <AWS_SIGV4>: AWS SigV4 签名参数
- -x <PROXY>: HTTP 代理
- --proxy-http-version <PROXY_HTTP_VERSION>: 连接代理的 HTTP 版本
- --proxy-http2: 使用 HTTP/2 连接代理
- --http-version <HTTP_VERSION>: HTTP 版本
- --http2: 使用 HTTP/2
- --host <HOST>: HTTP Host 头
- --disable-compression: 禁用压缩
- -r, --redirect <REDIRECT>: 重定向次数限制 (默认: 10)
- --disable-keepalive: 禁用 keep-alive
- --no-pre-lookup: 不预先进行 DNS 查询
- --ipv6: 仅查询 IPv6
- --ipv4: 仅查询 IPv4
- --insecure: 接受无效证书
- --connect-to <CONNECT_TO>: 覆盖 DNS 解析和默认端口
- --disable-color: 禁用彩色输出
- --unix-socket <UNIX_SOCKET>: 连接到 Unix 套接字
- --stats-success-breakdown: 统计成功和不成功请求的分布
- --db-url <DB_URL>: 将成功请求写入 SQLite 数据库
- --debug: 执行单个请求并输出请求和响应
2. 真实压力测试小贴士
- 使用 --disable-keepalive 模拟用户不使用 keep-alive 连接的情况。
- 使用 --latency-correction 避免协同省略问题。
- 结合 -z 或 -n、-c 和 -q 模拟真实负载。
总而言之,oha 是一个强大、易用且高效的 HTTP 负载生成器,无论你是开发人员、测试人员还是运维人员,它都能成为你得力的助手。快来试试吧,让你的 HTTP 请求“飞”起来!