当前位置: 首页 > news >正文

oha:一款轻量级HTTP负载测试工具

引言

在Web开发和运维工作中,我们经常需要对网站或API进行压力测试,以评估其在高并发情况下的性能表现。oha是一款用Rust编写的轻量级HTTP负载测试工具,它简单易用、功能强大,并且提供了直观的实时测试界面。

一、oha简介

oha(Ohayou)是一个受rakyll/hey启发的HTTP负载生成器,具有以下特点:

  • 使用Rust语言编写,性能优异
  • 支持实时TUI动画展示测试过程
  • 支持HTTP/1.1、HTTP/2和HTTP/3
  • 跨平台支持(Linux、macOS、Windows)
  • 提供多种输出格式(文本、JSON、CSV)
    在这里插入图片描述

二、安装方法

2.1 Windows系统安装

winget install hatoo.oha

安装完成后,在命令提示符或PowerShell中输入oha --version验证安装是否成功。

2.2 macOS系统安装

brew install oha

安装完成后,在终端中输入oha --version进行验证。

2.3 Linux系统安装

Ubuntu/Debian系统
echo "deb [signed-by=/usr/share/keyrings/azlux-archive-keyring.gpg] http://packages.azlux.fr/debian/ stable main" | sudo tee /etc/apt/sources.list.d/azlux.list
sudo wget -O /usr/share/keyrings/azlux-archive-keyring.gpg https://azlux.fr/repo.gpg
sudo apt update
sudo apt install oha
Arch Linux系统
sudo pacman -S oha

2.4 通过Rust Cargo安装

cargo install oha

2.5 下载预编译二进制文件

对于无法使用包管理器的系统,可以直接从GitHub Releases页面下载预编译的二进制文件:

  1. 访问:https://github.com/hatoo/oha/releases
  2. 根据你的系统架构下载对应版本
  3. 解压后将二进制文件放到系统PATH路径中

三、基本使用方法

3.1 最简单的测试

oha最基本的使用方式是指定目标URL:

oha https://www.baidu.com

默认参数(200个请求,50个并发连接)对目标URL进行测试。
在这里插入图片描述

3.2 常用参数说明

  • -n:指定总请求数
  • -c:指定并发连接数
  • -z:指定测试持续时间
  • -q:限制每秒请求数(QPS)
  • -m:指定HTTP方法
  • -H:添加自定义HTTP头
  • -d:指定请求体数据
  • -T:指定Content-Type
  • --no-tui:禁用实时界面
  • -o:指定输出文件
  • --output-format:指定输出格式

3.3 实用示例

示例1:指定并发连接数和请求数
oha -n 500 -c 100 https://www.baidu.com

发送500个请求,使用100个并发连接。
在这里插入图片描述

示例2:按时间进行测试
oha -c 50 -z 30s https://www.baidu.com

使用50个并发连接,持续测试30秒。

示例3:限制请求速率
oha -q 20 -c 10 https://www.baidu.com

限制每秒最多发送20个请求,使用10个并发连接。

示例4:POST请求测试
oha -m POST -H "Content-Type: application/json" -d '{"key": "value"}' https://httpbin.org/post

发送一个POST请求,包含JSON格式的请求体。

示例5:禁用实时界面并保存结果
oha --no-tui -o result.json --output-format json -c 50 -n 200 https://www.baidu.com

禁用实时界面,并将测试结果以JSON格式保存到result.json文件中。

四、高级功能

4.1 动态URL测试

oha支持使用正则表达式生成动态URL,适用于测试带有随机参数的接口:

oha --rand-regex-url http://httpbin.org/get/[a-z][0-9]{3}

生成类似http://httpbin.org/get/a123的随机URL进行测试。

4.2 从文件读取URL列表

当需要测试多个不同的URL时,可以将URL列表保存到文件中:

# urls.txt文件内容
https://www.baidu.com
https://www.google.com
https://www.bing.comoha --urls-from-file urls.txt

4.3 Burst模式测试

Burst模式可以模拟突发流量,例如每5秒发送10个请求:

oha -n 30 --burst-delay 5s --burst-rate 10 https://www.baidu.com

4.4 不显示花里胡哨的界面,只看结果

oha --no-tui https://www.baidu.com

五、测试结果解读

oha测试完成后会显示详细的统计信息,主要关注以下几个指标:

5.1 关键指标说明

  • Total requests:总请求数
  • Total duration:总测试时间
  • Requests per second:每秒请求数(QPS)
  • Fastest request:最快响应时间
  • Slowest request:最慢响应时间
  • Average request time:平均响应时间
  • Status code distribution:HTTP状态码分布

5.2 性能分析建议

  1. 响应时间分析:关注平均响应时间和P95/P99响应时间,这些指标反映了用户体验
  2. 吞吐量分析:QPS越高说明系统处理能力越强
  3. 错误率分析:关注非200状态码的比例,错误率过高说明系统存在问题
  4. 资源利用率:结合服务器CPU、内存使用率进行综合分析
http://www.dtcms.com/a/358826.html

相关文章:

  • XHR 介绍及实践
  • 论文介绍:《Small Language Models are the Future of Agentic AI》
  • SSR降级CSR:高可用容灾方案详解
  • 使用axios封装post和get
  • istringviewstream 和 outstringstream
  • 嵌入式学习日记
  • 【3D算法技术入门】如何基于建筑图片重建三维数字资产?
  • 行内元素块元素
  • 【办公类-39-06】20250830通义万相水果图(万相2.1专业Q版线描风格+万相专业2.2默认简笔画效果)
  • “我店模式“当下观察:三方逻辑未变,三大升级重构竞争力
  • 如何提高微型导轨的生产效率?
  • 【Java EE进阶 --- SpringBoot】Spring Web MVC(Spring MVC)(二)
  • Qt中的QSS介绍
  • JavaScript 中的 this 关键字
  • 机器视觉学习-day11-图像噪点消除
  • VuePress添加自定义组件
  • android studio编译安卓项目报gradle下载失败
  • [光学原理与应用-337]:ZEMAX - 自带的用于学习的样例设计
  • 知识随记-----Qt 样式表深度解析:何时需要重写 paintEvent 让 QSS 生效
  • [算法] 双指针:本质是“分治思维“——从基础原理到实战的深度解析
  • 05.《ARP协议基础知识探秘》
  • 构建AI智能体:十八、解密LangChain中的RAG架构:让AI模型突破局限学会“翻书”答题
  • 银河麒麟V10(Phytium,D2000/8 E8C, aarch64)开发Qt
  • 魔方的使用
  • 进制转换问题
  • 【车载开发系列】CAN与CANFD上篇
  • 前端代码结构详解
  • Python数据处理
  • 6.1 Update不能写复杂的逻辑
  • ReconDreamer