当前位置: 首页 > 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.xdnf.cn/news/1400509.html

相关文章:

  • 流式HTTP MCP服务器开发
  • ceph集群部署
  • 接雨水,leetCode热题100,C++实现
  • 嵌入式linux相机(2)
  • PostgreSQL数据类型一览(数值类型)
  • opencv实现轮廓绘制和选择
  • 生成式 AI 重构内容生产:效率提升背后的创作版权边界争议
  • day43-Ansible-PlayBook
  • 如何使用快照将 AWS OpenSearch 服务中的数据从开发环境复制到生产环境
  • 知料觅得-新一代AI搜索引擎
  • Linux网络服务发现在VPS云服务器自动化配置的关键技术与实践
  • 给某个conda环境安装CUDA 12.4版本 全局CUDA不变
  • C++的迭代器和指针的区别
  • 【小白笔记】基本的Linux命令来查看服务器的CPU、内存、磁盘和系统信息
  • Java SpringAI应用开发面试全流程解析:RAG、流式推理与企业落地
  • 物联网(IoT)中常用的通信协议
  • GD32VW553-IOT 基于 vscode 的 bootloader 移植(基于Cmake)
  • 微论-突触的作用赋能思考(可能是下一代人工智能架构的启发式理论)
  • 响应式编程框架Reactor【5】
  • Spring代理的特点
  • AI-调查研究-65-机器人 机械臂控制技术的前世今生:从PLC到MPC
  • 【MCP系列教程】 Python 实现 FastMCP StreamableHTTP MCP:在通义灵码 IDE 开发并部署至阿里云百炼
  • JsMind 常用配置项
  • 【计算机网络】HTTP是什么?
  • 基于Docker部署的Teable应用
  • Linux驱动开发重要操作汇总
  • “人工智能+”政策驱动下的技术重构、商业变革与实践路径研究 ——基于国务院《关于深入实施“人工智能+”行动的意见》的深度解读
  • wpf之依赖属性
  • 桌面GIS软件FlatGeobuf转Shapefile代码分享
  • 学习游戏制作记录(视觉上的优化)