OHA简介
OHA是一个用Rust编写的开源项目,灵感来源于rakyll/hey工具,同时结合了tokio异步运行时和ratatui库提供的精致文本用户界面(TUI)。OHA不仅能够发送HTTP请求到指定的Web应用,还能以实时的方式展示测试效果,使得开辟职员能够直观地看到系统的表现。
OHA项目托管在GitHub上,其堆栈地址为:https://github.com/hatoo/oha。通过该链接,你可以找到最新的代码、文档以及社区贡献。
安装OHA
OHA支持多种操作系统,包罗Linux、macOS和Windows。下面将详细介绍如何在不同平台上安装OHA。
在Arch Linux上安装
对于Arch Linux用户,你可以直接使用AUR助手(如yay或pamac)来安装OHA。比方,使用yay命令:
在macOS上使用Homebrew安装
macOS用户可以通过Homebrew来安装OHA。首先,确保你已经安装了Homebrew,然后运行以下命令:
- brew install hatoo/tap/oha
复制代码 在Windows上使用winget安装
Windows用户可以通过winget包管理器来安装OHA。假如你还没有安装winget,可以从Microsoft的官方网站下载并安装。安装完成后,运行以下命令:
在Debian上使用Azlux的堆栈安装
对于Debian用户,你可以添加Azlux的APT堆栈来安装OHA。首先,添加堆栈到/etc/apt/sources.list文件中:
- deb https://repo.azlux.fr/apt/debian/ stable main
复制代码 然后,更新APT索引并安装OHA:
- sudo apt-get update
- sudo apt-get install oha
复制代码 使用X-CMD安装(实用于Linux、macOS、Windows WSL/GitBash)
X-CMD是一个跨平台的命令行工具,它允许你在不同的操作系统上运行相同的命令。假如你已经安装了X-CMD,你可以使用它来安装OHA:
OHA的使用方法
OHA的使用非常直观,它提供了丰富的命令行选项来定制测试参数。下面将详细介绍OHA的使用方法,并对Usage部分进行中文翻译。
基本用法
OHA的基本用法非常简单,你只必要提供要测试的URL即可。比方:
默认情况下,OHA会发送200个请求,并发连接数为50。
选项详解
OHA提供了许多选项来定制测试举动。
- -n<N_REQUESTS>:要运行的请求数。[默认值:200]
- -c<N_CONNECTIONS>:要并发运行的连接数。对于较大的 -c,你大概必要增加打开文件的限制。[默认值:50]
- -p<N_HTTP2_PARALLEL>:在 HTTP/2 上发送的并行请求数。oha 将总共运行 c*p 个并发工作线程。[默认值:1]
- -z:应用步伐发送请求的持续时间。假如指定了持续时间,则忽略 n。在 HTTP/1 上,当到达持续时间时,正在进行的请求将被中断并计为“因截止时间而中断”。你可以使用 -w 选项更改此举动。当前,在 HTTP/2 上,当到达持续时间时,会等待正在进行的请求,-w 选项将被忽略。示例:-z 10s -z 3m。
- -w, --wait-ongoing-requests-after-deadline:当到达持续时间时,等待正在进行的请求。
- -q<QUERY_PER_SECOND>:限制所有查询的每秒查询数(QPS)。
- –burst-delay<BURST_DURATION>:在预定数目的请求之间引入延迟。注意:假如指定了 qps,则忽略 burst。
- –burst-rate<BURST_REQUESTS>:burst 的请求速率。默认值为 1。注意:假如指定了 qps,则忽略 burst。
- –rand-regex-url:使用 rand_regex 库生成 URL,但每个查询禁用点的匹配,比方 http://127.0.0.1/[a-z][a-z][0-9]。目前,动态方案、主机和端口与 keep-alive 共同使用效果不佳。
- –urls-from-file:从文件中读取要查询的 URL。
- –max-repeat<MAX_REPEAT>:用于 --rand-regex-url 的参数。max_repeat 参数给出了 x*、x+ 和 x{n,} 操作符将变成的最大额外重复次数。[默认值:4]
- –dump-urls<DUMP_URLS>:调试 --rand-regex-url 时,转储目标 URL。
- –latency-correction:校正延迟以避免协调省略问题。假如未设置 -q,则忽略此项。
- –no-tui:无实时 TUI。
- -j, --json:以 JSON 格式打印效果。
- -fps :TUI 的每秒帧数。[默认值:16]
- -m, --method :HTTP 方法。[默认值:GET]
- -H :自定义 HTTP 头。示例:-H “foo: bar”
- -t :每个请求的超时时间。默以为无限。
- -A <ACCEPT_HEADER>:HTTP Accept 头。
- -d <BODY_STRING>:HTTP 请求体。
- -D <BODY_PATH>:从文件获取 HTTP 请求体。
- -T <CONTENT_TYPE>:Content-Type。
- -a <BASIC_AUTH>:基本身份验证,用户名:密码
- -x :HTTP 署理。
- –proxy-http-version <
ROXY_HTTP_VERSION>:连接到署理的 HTTP 版本。可用值:0.9、1.0、1.1、2。
- –proxy-http2:使用 HTTP/2 连接到署理。是 --proxy-http-version=2 的简写。
- –http-version <HTTP_VERSION>:HTTP 版本。可用值:0.9、1.0、1.1、2。
- –http2:使用 HTTP/2。是 --http-version=2 的简写。
- –host :HTTP Host 头。
- –disable-compression:禁用压缩。
- -r, --redirect :重定向的限制次数。设置为 0 则无重定向。HTTP/2 不支持重定向。[默认值:10]
- –disable-keepalive:禁用 keep-alive,防止在不同的 HTTP 请求之间重用 TCP 连接。HTTP/2 不支持此功能。
- –no-pre-lookup:不在开始时执行 DNS 查找以缓存它。
- –ipv6:仅查找 ipv6。
- –ipv4:仅查找 ipv4。
- –insecure:接受无效证书。
- –connect-to <CONNECT_TO>:使用雷同 ‘example.org:443:localhost:8443’ 的字符串覆盖 DNS 解析和默认端口号。
- –disable-color:禁用颜色方案。
- –unix-socket <UNIX_SOCKET>:连接到 Unix 套接字而不是 URL 中的域。仅实用于非 HTTPS URL。
- –stats-success-breakdown:在时间直方图和分布统计信息中包罗相应状态码的乐成或不乐成细分。
- –db-url <DB_URL>:将乐成请求写入 sqlite 数据库 url,比方 test.db。
- –debug:执行单个请求并转储请求和相应。
- -h, --help:打印帮助信息。
- -V, --version:打印版本信息。
JSON 输出:
当设置 -j 选项时,oha 会打印 JSON 输出。JSON 输出的模式在 schema.json 中定义。
基准测试:
性能比较
我们使用 hyperfine 对 oha 和 rakyll/hey 在当地服务器上进行了基准测试。服务器使用 node 编写。你可以通过复制粘贴此文件的内容,然后运行它来启动服务器。复制粘贴文件内容后,你可以在不同的终端选项卡中运行 hyperfine 进行基准测试。
基准测试效果:
- 基准测试 1:oha --no-tui http://localhost:3000
时间(均匀值 ± σ):10.8 ms ± 1.8 ms [用户:5.7 ms,系统:11.7 ms]
范围(最小…最大):8.7 ms … 24.8 ms(107 次运行)
- 基准测试 2:hey http://localhost:3000
时间(均匀值 ± σ):14.3 ms ± 4.6 ms [用户:12.2 ms,系统:19.4 ms]
范围(最小…最大):11.1 ms … 48.3 ms(88 次运行)
择要:
在此基准测试中,oha --no-tui http://localhost:3000 的运行速率比 hey http://localhost:3000 快约 1.32 ± 0.48 倍。
提示:
- 在更逼真的条件下进行压力测试:oha 使用了从 rakyll/hey 继续的默认选项,但你大概必要更改选项以在更逼真的条件下进行压力测试。
- –disable-keepalive:在现实中,用户不会使用 Keep-Alive 查询相同的 URL。你大概想要在没有 Keep-Alive 的情况下运行。
- –latency-correction:你可以使用 --latency-correction 来避免协调省略问题。
- Burst 功能:你可以使用 --burst-delay 和 --burst-rate 选项在定义的请求数目之间引入延迟。
- 动态 URL 功能:你可以使用 --rand-regex-url 选项为每个连接生成随机 URL。
- 从文件读取 URL 功能:你可以使用 --urls-from-file 选项从文件中读取目标 URL。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |