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

Web服务压力测试工具hey学习一:使用方法

先给算法同学推荐个人工智能学习网站,写的挺详细的,感兴趣的同学可以去看看:人工智能学习网站,点击跳转

1、hey工具简介

你见过如此清晰且简明扼要的压力测试结果吗?他仅仅展示了耗时信息、发送速率信息,还展示了耗时分布的直方图信息,P90、P95也一目了然,这个结果就是这篇文章介绍的hey工具返回的。

hey是一个非常轻量的http服务压测工具,今天主要介绍其使用方法,后面还会学习其源码,解析其精巧的实现请求发送并对结果进行分析的技术方案,他的设计理念和实现思路非常值得借鉴和学习。 

十三陵水库

 

 hey是一个由 Go 语言编写的轻量级 HTTP 负载测试工具,项目开源,其目的是替代 ApacheBench(ab),提供更灵活的 HTTP(S) 负载模拟能力,项目地址:

github.com/rakyll/hey

无法翻墙的同学可以访问gitee地址,我从github克隆了一份过来,代码也是最新的:

https://gitee.com/bd-super-sugar/hey.git

2、hey的使用场景

2.1 web应用性能评估

  • 测试 API 在高并发下的响应时间和吞吐量,识别性能瓶颈。
  • 验证微服务架构的稳定性,确保系统能承受预期流量。

2.2 服务器负载测试

  • 模拟大规模用户访问,评估服务器资源配置的合理性。
  • 检测服务器在极限流量下的表现,优化资源分配或扩容策略。

2.3 开发调试辅助

  • 在接口联调阶段,快速验证接口功能及性能。
  • 结合持续集成(CI)流程,自动化执行性能测试。

3、hey核心功能及优势

1、并发控制

支持通过 -c 参数指定并发工作线程数(默认 50),模拟多用户同时访问。结合 -q 参数可限制每个工作线程的 QPS(每秒查询数),实现精细化的流量控制。

2、请求定制 

支持多种 HTTP 方法(GET、POST、PUT、DELETE 等),通过 -m 参数指定。可自定义请求头(-H)、请求体(-d 或 -D 读取文件)、内容类型(-T)等,适配不同 API 需求。支持基本身份验证(-a)、代理设置(-x)和 HTTP/2(-h2)。

3、测试模式 

【固定请求数模式】:通过 -n 指定总请求数(默认 200),测试完成后输出统计。【持续时间模式】:通过 -z 指定测试时长(如 -z 10s 或 -z 3m),忽略 -n 参数。

4、结果分析详尽​​​​​​​

提供详细的统计报告,包括总耗时、最慢/最快请求时间、平均响应时间、RPS(每秒请求数)等。输出响应时间分布直方图和延迟百分比(如 50%、90%、99% 请求的耗时)。支持 CSV 格式输出(-o csv),便于程序化分析。

hey在技术上有很强的优势:

  • 基于 Go 的协程(goroutine)实现高并发,资源占用低,能快速生成大量请求。
  • 编译为单一二进制文件,支持 Linux、macOS、Windows 等操作系统。
  • mac下,可通过 brew install hey或直接下载预编译版本快速安装。

4、hey的使用方法

hey作为一个应用程序,其参数的设置,都是通过命令行传入的,支持的参数有20多个,主要的有以下几个:​​​​​​​

-n:设定发送请求数量,默认200.-c:并发数量,启动几个线程来发送请求。-q:发送速率,qps设置。-z:发送时间,设定-z参数后,-n参数将会失效。-o:输出格式,支持csv,输出内容为逗号分隔的表格数据,每一行代表一次请求的详细指标。-m:设置http方法,支持GET, POST, PUT, DELETE, HEAD等选项。-H:用于设置任意自定义header。-t:每个请求的超时时间,默认20s,设置为0,则没有超时限制。-A:用于专门设置 HTTP 的 Accept 头,比如 -A application/json,等价于 Accept: application/json。它是一个快捷参数,只能设置 Accept 头。-d:请求体。-D:来自文件的请求体,比如:/home/user/file.txt

-q参数需要解释下,它设置的是一个线程的发送速率,比如设置为5,-c为1时,那么工具发送的整个qps就是5,如果-c为10,-q为5,那么整体qps就是50,这个要特别注意。

接下来进行实际验证和测试,来进一步说明hey的使用方法,首先启动一个服务,用于测试的api做了限流,最大支持1qps,下面我们进行压测,发送5个请求,一个线程,qps为1:

./hey -n 5 -c 1 -q 1 -m POST http://192.168.3.67:8200/mianhuatang/load/articles

理论上,服务对于hey发上来的请求都能够处理,因为服务支持1qps,发送的速率设置的也是1qps,测试结果如下:

 

5个请求,全部正确处理。

测试结果:

测试持续5.0046s,最快响应时间2.9ms,最慢响应时间8.7ms,平均4.5ms,每秒发送请求个数0.9991,基本就是1qps,http状态码200的是5个,全部正常返回。

下面调整一下服务,支持到2qps,将hey的发送速率也调整到2:

 

下面将发送速率发送到3:

./hey -n 50 -c 1 -q 3 -m POST http://192.168.3.67:8200/mianhuatang/load/articles

 

由于hey的发送速率大于了服务的承载能力,因此只正确处理了大概2/3左右的请求。

下面测试发送post请求,使用-d参数携带post参数到服务:

如果参数比较多,可以将参数放到txt文件里,使用-D参数传入文件地址:

./hey -n 5 -c 1 -q 1 -m POST -D /Users/liupeng/Documents/career/hey-master/param.txt http://192.168.3.67:8200/mianhuatang/clip/search

 

以上就是hey的基本使用方法,已能够满足大部分的压力测试场景,接下来我将研究一下hey的源码,学习其实现细节,后面也会在公众号上把这部分内容写下来,感兴趣的同学可以蹲个后续。

今天就写到这了,我是棉花糖,下期见~~~~~~~~~~~,欢迎同学们关注。

 

往期推荐

2025越山向海张家口站:从草原天路到崇礼142.6公里,我们一起跑过。

云端【多维度限流】技术方案设计,为服务稳定保驾护航

自动驾驶数据仓库:对时间片进行合并的小算法。

一个有线上问题带来的知识点:Python日志打印

一个实际上线的项目:Elastic检索库历史数据清理

Elastic:索引生命周期管理(Index Lifecycle Management)-减轻ES存储压力

Elasticsearch:delete_by_query使用方法

大同华严寺:受人民爱戴的耿市长还会回来吗?薄伽教藏的合掌漏齿菩萨你知道是谁吗?

云冈石窟:翻开这本距今1565年、与天地同久长的石头史书,感受北魏王朝雕刻艺术的巅峰之作。

我在百度的这10年~~

一个读写excel的简单程序(golang)

一个异步架构设计:批量消费RabbitMQ,批量写入Elasticsearch(golang实现)

Python web框架sanic+tortoise服务框架搭建(MVP版本)

命令行参数的艺术:Python、Golang、C++技术实现

supervisor,你理应知道。

借助tritonserver完成gpt2模型的本地私有化部署

武汉抗疫英雄汪勇:平凡人的非凡之举。

微信小程序文章列表焕新颜:从丑小鸭到白天鹅的华丽蜕变

李白:为何两次选择做了上门女婿?

纳兰性德-我是人间惆怅客,世间唯有『若』字,最难成真

tritonserver学习之九:tritonserver grpc异步模式

条件变量的使用(golang)

2025年,我要做个自我介绍

 

http://www.xdnf.cn/news/1157131.html

相关文章:

  • 如何解决pip安装报错error subprocess-exited-with-error问题
  • 力扣面试150题--搜索插入位置
  • 30天打牢数模基础-灰色预测模型讲解
  • BLIP、InternVL Series(下)
  • Eureka+LoadBalancer实现服务注册与发现
  • JavaScript 对象操作、继承与模块化实现
  • RCE随笔(1)
  • 使用 Pyecharts 绘制精美饼状图:从基础到高级技巧
  • 【LeetCode 热题 100】236. 二叉树的最近公共祖先——DFS
  • Effective Python 条款13:通过带星号的unpacking操作来捕获多个元素,不要用切片
  • 构建一个简单的Java框架来测量并发执行任务的时间
  • 深入浅出理解动态规划
  • The FastMCP Client
  • `tidyverse` 中涉及的函数及其用法
  • 【RAG Agent】Deep Searcher实现逻辑解析
  • 【JS逆向基础】数据库之redis
  • 第一章: 初识 Redis:背后的特性和典型应用场景
  • 什么是 ELK/Grafana
  • 使用pytorch创建模型时,nn.BatchNorm1d(128)的作用是什么?
  • Muduo库中单例模式详解
  • Mysql(事务)
  • 小型支付项目3-5:检测未接收到或未正确处理的支付回调通知
  • UE5多人MOBA+GAS 番外篇:移植Lyra的伤害特效(没用GameplayCue,因为我失败了┭┮﹏┭┮)
  • 音视频学习(四十一):H264帧内压缩技术
  • 【Vue进阶学习笔记】Vue 路由入门指南
  • 单线程 Reactor 模式
  • 动静态库的制作和原理
  • 【unitrix】 6.10 类型转换(from.rs)
  • [BUG]关于UE5.6编译时出现“Microsoft.MakeFile.Targets(44,5): Error MSB3073”问题的解决
  • 【软件测试】从软件测试到Bug评审:生命周期与管理技巧