当前位置:首页 > 技术分析 > 正文内容

告别“慢吞吞”:用 oha 让你的 HTTP 请求“飞”起来!

ruisui883个月前 (01-23)技术分析16

还在为测试 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 请求“飞”起来!

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/484.html

分享给朋友:

“告别“慢吞吞”:用 oha 让你的 HTTP 请求“飞”起来!” 的相关文章

Excel VBA 收费结算模块/一步一步带你设计【收费管理系统】11

本文于2023年6月9日首发于本人同名公众号:Excel活学活用,更多文章案例请搜索关注!☆本期内容概要☆用户窗体设置:收费结算模块设置(6)增加合计金额增加收款方式选择输入大家好,我是冷水泡茶,前几期我们分享了【收费管理系统】的设计,最近一期是(Excel VBA 收费结算模块/一步一步带你设计【...

「Git迁移」三行命令迁移Git包含提交历史,分支,tag标签等信息

问题描述:公司需要将一个git远程服务器的全部已有项目迁移到一台新服务器的Gitlab中,其中需要包含全部的提交纪录,已有的全部分支与全部打tag标签,目前此工作已全部迁移完毕,特此记录一下操作步骤环境描述:1. 要迁移的远程Git:Gitblit2. 迁移目的Git:Gitlab3. 暂存代码的P...

2024最新版:前端性能优化方案汇总

前端训练营:1v1私教,终身辅导计划,帮你拿到满意的 offer。 已帮助数百位同学拿到了中大厂 offer。欢迎来撩~~~~~~~~Hello,大家好,我是 Sunday。前端性能优化一直是很多同学非常关注的问题,在日常的面试中也是经常会被问到的点。所以今天咱们就花一点时间来了解一下2024最新的...

别让“跑焦”毁所有!仅需这一项设置,即可显著改善镜头对焦精度

我常常会收到一些摄影爱好者的私信,也一直在努力的帮助大家解决更多摄影中常见问题。在我收到的所有问题中。有一个问题是最麻烦的,那就是“为什么我的图像看起来模糊?”。这个问题几乎每个人都遇到过,究其原因可以说是多种多样相对复杂。起初我一直认为是对焦问题所导致,也就有了我之前所写的“后按对焦”以及“对焦模...

vue 开发规范

项目运行指南(#项目运行指南)开发本地环境(#开发本地环境)开发相关插件/工具(#开发相关插件工具)开发规范(#开发规范)vue(#vue)【数据流向】(#数据流向)【慎用全局注册】(#慎用全局注册)【组件名称】(#组件名称)【组件中的 CSS】(#组件中的-css)【统一标签顺序】(#统一标签顺序...

VUE 技术栈

官网链接:https://cn.vuejs.org/什么是vue:渐进式JavaScript 框架vue-cli链接:https://cli.vuejs.org/vue-cli安装:npm install -g @vue/clivue -V创建一个项目:vue create xxxxxx模版语法:文...