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

【工具推荐定制开发】一款轻量的批量web请求命令行工具支持全平台:hey,基本安装、配置、使用

背景
在开发 Web 应用的过程中,作为开发人员,为了确认接口的性能能够达到要求,我们往往需要一个接口压测工具,帮助我们快速地对我们所提供的 Web 服务发起批量请求。在接口联调的过程中,我们通常会用 Postman 等图形化工具来构造对应的请求并调试接口。但是,如果要做批量的请求,并且希望能展示出对应的统计信息,还是需要通过专门的工具才行。

Hey 就是一款非常适合该场景的命令行工具,它由 go 语言编写,并且在 Github 上已开源。Hey 能够并发地运行所提供的请求数并打印统计信息,还支持 HTTP2 站点。

本文将介绍 Hey 的基本安装使用,社区用户基于 Hey 的功能扩展,以及笔者基于自己的需求场景所做的定制化开发工作。

在这里插入图片描述

hey
Hey的安装也非常简单,可以直接在其 GIthub 的项目主页上进行下载。对于 macOS 的用户则更加简单,可以直接通过 brew install hey 进行安装。

https://github.com/rakyll/hey

安装完成后,我们只需要在命令行中敲入对应的命令,就可以实现对某个 url 的批量调用,而且 Hey 支持了大量的参数,让调用者可以进行自定义。用法和选项如下:

Usage: hey [options...] <url>Options:
-n  要运行的请求数。默认值为200-c  要同时运行的工作程序数。总请求数不能小于并发级别。默认值为50-q  每个工作程序的查询每秒(QPS)速率限制。默认值为无速率限制。
-z  发送请求的应用程序持续时间。达到持续时间后,应用程序将停止并退出。如果指定了持续时间,则忽略n。示例:-z 10s -z 3m。
-o  输出类型。如果未提供,则打印摘要。 "csv"是唯一支持的替代方案。以逗号分隔的值格式转储响应指标。
-m  HTTP方法之一:GET、POST、PUT、DELETE、HEAD、OPTIONS。
-H  自定义HTTP标头。您可以通过重复标志指定尽可能多的标头。例如,-H“Accept:text / html”-H“Content-Type:application / xml”。
-t  每个请求的超时时间(以秒为单位)。默认值为20,使用0表示无限制。
-A  HTTP接受标头。
-d  HTTP请求正文。
-D  HTTP请求正文来自文件。例如,/ home / user / file.txt或./ file.txt。
-T  内容类型,默认为"text / html"-a  基本身份验证,用户名:密码。
-x  HTTP代理地址为主机:端口。
-h2 启用HTTP / 2-host HTTP主机标头。
-disable-compression 禁用压缩。
-disable-keepalive 禁用保持活动,防止在不同的HTTP请求之间重用TCP连接。
-disable-redirects 禁用HTTP重定向的跟随
-cpus 使用的CPU核心数。 (当前机器的默认值为8个核心)

下面举一个简单的例子,比如我们希望批量请求百度的主页,只需要执行下列命令:

hey -n 10 -c 2 http://www.baidu.com/

我们就以每次 2 个请求并发发送,发送 5 次访问 baidu.com 的站点,并能得到一份统计报告:

Summary:Total:	0.8334 secsSlowest:	0.3334 secsFastest:	0.0776 secsAverage:	0.1611 secsRequests/sec:	11.9987Response time histogram:0.078 [1]	|■■■■■■■■■■■■■0.103 [2]	|■■■■■■■■■■■■■■■■■■■■■■■■■■■0.129 [1]	|■■■■■■■■■■■■■0.154 [1]	|■■■■■■■■■■■■■0.180 [3]	|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■0.205 [0]	|0.231 [0]	|0.257 [0]	|0.282 [0]	|0.308 [1]	|■■■■■■■■■■■■■0.333 [1]	|■■■■■■■■■■■■■Latency distribution:10% in 0.0795 secs25% in 0.1057 secs50% in 0.1592 secs75% in 0.2951 secs90% in 0.3334 secs0% in 0.0000 secs0% in 0.0000 secsDetails (average, fastest, slowest):DNS+dialup:	0.0005 secs, 0.0776 secs, 0.3334 secsDNS-lookup:	0.0004 secs, 0.0000 secs, 0.0022 secsreq write:	0.0000 secs, 0.0000 secs, 0.0001 secsresp wait:	0.0811 secs, 0.0394 secs, 0.1822 secsresp read:	0.0794 secs, 0.0330 secs, 0.1483 secsStatus code distribution:[200]	10 responses

可见,统计报告里面包含了各种信息,包括最快/最慢的请求耗时,请求耗时的分布,所有请求响应状态码的分布等等,能够很好很快地帮我们对 Web 服务的性能有一个大致的了解,从而做进一步的优化。

支持 url 中字段正则的 hey
虽然默认的 Hey 足够简单且配置选项丰富,但是它每次命令仅仅能针对一个 url 进行请求和统计分析。

有多名社区开发者在 Github Issue 中提到一个类似问题,那就是希望能够实现一定程度的 URL 动态化,让批量请求不只落在一个 url 上,而是支持调用者进行一些动态设置。

比如说,有社区开发者 preslavrachev 就在 url 中加入了正则的支持,让 url 能够在满足正则配置的情况下进行动态随机生成。举个例子:

hey -n 10 -c 2 http://www.baidu.com/{{[2-9][1-9]}}

统计报告如下,可以看到,url 都满足数字的十位数是 2-9,个位数是 1-9,而且是随机生成的,请求响应都是 404 也符合预期:

http://www.baidu.com/31
http://www.baidu.com/31
http://www.baidu.com/98
http://www.baidu.com/72
http://www.baidu.com/87
http://www.baidu.com/68
http://www.baidu.com/77
http://www.baidu.com/39
http://www.baidu.com/96
http://www.baidu.com/75Summary:Total:        0.3644 secsSlowest:      0.1597 secsFastest:      0.0463 secsAverage:      0.0726 secsRequests/sec: 27.4439Total data:   2000 bytesSize/request: 200 bytesResponse time histogram:0.046 [1]     |■■■■■■■0.058 [6]     |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■0.069 [1]     |■■■■■■■0.080 [0]     |0.092 [0]     |0.103 [0]     |0.114 [0]     |0.126 [0]     |0.137 [0]     |0.148 [0]     |0.160 [2]     |■■■■■■■■■■■■■Latency distribution:10% in 0.0473 secs25% in 0.0492 secs50% in 0.0529 secs75% in 0.1563 secs90% in 0.1597 secs0% in 0.0000 secs0% in 0.0000 secsDetails (average, fastest, slowest):DNS+dialup:   0.0202 secs, 0.0463 secs, 0.1597 secsDNS-lookup:   0.0117 secs, 0.0000 secs, 0.0584 secsreq write:    0.0001 secs, 0.0000 secs, 0.0010 secsresp wait:    0.0517 secs, 0.0461 secs, 0.0622 secsresp read:    0.0001 secs, 0.0000 secs, 0.0003 secsStatus code distribution:[404] 10 responses

【定制开发】支持 url 中 ID 自增的 ihey
刚好,笔者在做压测的时候,url 有一个 id 的动态字段,虽然社区开发者提供的正则方法,但是笔者的场景是一次性创建一大批任务,然后通过批量的调用来进行执行,在这种场景下,随机生成会导致大量的重复请求,而执行过的任务是不允许再次执行的,所以会有问题,所以,笔者的场景需要的是一种能支持数字自增的动态 url。

既然现有的实现无法支持,那么就只能自己做定制开发。笔者对原仓库进行了 fork,同时根据自己的需要进行了定制开发,让这个工具支持了数字自增的动态 url,让我们来看看最终的效果。

为了跟原来的 hey 命令区分开,这里笔者将命令改成 ihey(increase hey),并且已经将可执行文件上传到仓库,可以直接下载执行。命令如下:

ihey -n 10 -c 2 http://some_api/{{20:}}

因为是基于上面 preslavrachev 的修改进行的二次开发,所以这里标识符号依然是{{}},为了标识出是从某个数字开始的,这里就使用了{{number:}},这里的 number 仅支持正整数。

统计报告如下,可以看到,请求 url 从 20 开始,每两个是一组,所以两两的顺序是不确定的,但是总的是从 20-29递增,符合我们的预期。

http://www.baidu.com/21
http://www.baidu.com/20
http://www.baidu.com/22
http://www.baidu.com/23
http://www.baidu.com/24
http://www.baidu.com/25
http://www.baidu.com/26
http://www.baidu.com/27
http://www.baidu.com/28
http://www.baidu.com/29Summary:Total:        0.2404 secsSlowest:      0.0886 secsFastest:      0.0341 secsAverage:      0.0474 secsRequests/sec: 41.5902Total data:   2000 bytesSize/request: 200 bytesResponse time histogram:0.034 [1]     |■■■■■■■■0.040 [5]     |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■0.045 [2]     |■■■■■■■■■■■■■■■■0.050 [0]     |0.056 [0]     |0.061 [0]     |0.067 [0]     |0.072 [0]     |0.078 [0]     |0.083 [0]     |0.089 [2]     |■■■■■■■■■■■■■■■■Latency distribution:10% in 0.0360 secs25% in 0.0372 secs50% in 0.0389 secs75% in 0.0839 secs90% in 0.0886 secs0% in 0.0000 secs0% in 0.0000 secsDetails (average, fastest, slowest):DNS+dialup:   0.0095 secs, 0.0341 secs, 0.0886 secsDNS-lookup:   0.0007 secs, 0.0000 secs, 0.0035 secsreq write:    0.0000 secs, 0.0000 secs, 0.0001 secsresp wait:    0.0375 secs, 0.0340 secs, 0.0406 secsresp read:    0.0001 secs, 0.0000 secs, 0.0001 secsStatus code distribution:[404] 10 responses

总结
本文主要介绍了以下的内容:

一款方便轻量的 api 批量请求工具:hey
社区开发者基于 hey 所做的 url 动态化优化,支持在 url 中通过正则表达式让 hey 随机请求 url。
笔者基于 hey 和社区开发者进行了定制化开发:ihey,让 hey 支持 url 中配置可自增的数字路径,从而达到可预期的动态 url 批量请求。

相关文章:

【工具推荐定制开发】一款轻量的批量web请求命令行工具支持全平台:hey,基本安装、配置、使用

背景 在开发 Web 应用的过程中&#xff0c;作为开发人员&#xff0c;为了确认接口的性能能够达到要求&#xff0c;我们往往需要一个接口压测工具&#xff0c;帮助我们快速地对我们所提供的 Web 服务发起批量请求。在接口联调的过程中&#xff0c;我们通常会用 Postman 等图形化…...

Linux进程——进程的创建(fork的原理)

前言&#xff1a;在上一篇文章中&#xff0c;我们已经会使用getpid/getppid函数来查看pid和ppid,本篇文章会介绍第二种查看进程的方法&#xff0c;以及如何创建子进程&#xff01; 本篇主要内容&#xff1a; 查看进程的第二种方法创建子进程系统调用函数fork 在开始前&#xff…...

ICode国际青少年编程竞赛- Python-1级训练场-路线规划

ICode国际青少年编程竞赛- Python-1级训练场-路线规划 1、 Dev.step(3) Dev.turnLeft() Dev.step(4)2、 Dev.step(3) Dev.turnLeft() Dev.step(3) Dev.step(-6)3、 Dev.step(-2) Dev.step(4) Dev.turnLeft() Dev.step(3)4、 Dev.step(2) Spaceship.step(2) Dev.step(3)5、…...

uniapp微信小程序1rpx border在某些手机机型上边框显示不出来解决方案

小程序在ios系统中&#xff0c;如果border小于1px的情况下&#xff0c;border就可能显示不全(可能少了上下左右任意一边) 只需要加一个::after或::before伪类&#xff0c;使用绝对定位定在原来元素上边就不会产生问题了&#xff01; .d_card_line1_tag { padding: 1rpx 14r…...

Linux mkfs.ext2命令教程:如何创建ext2文件系统(附实例详解和注意事项)

Linux mkfs.ext2命令介绍 mkfs.ext2是Linux系统中用于创建ext2文件系统的命令。它的作用是在指定的设备上创建一个ext2文件系统&#xff0c;使该设备能够存储文件和目录。创建ext2文件系统的过程包括以下几个步骤。 Linux mkfs.ext2命令适用的Linux版本 mkfs.ext2命令在大多…...

基于Springboot的校园招聘系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的校园招聘系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…...

将 Vue、React、Angular、HTML 等一键打包成 macOS 和 Windows 平台客户端应用

应用简介 PPX 基于 pywebview 和 PyInstaller 框架&#xff0c;构建 macOS 和 Windows 平台的客户端。本应用的视图层支持 Vue、React、Angular、HTML 中的任意一种&#xff0c;业务层支持 Python 脚本。考虑到某些生物计算场景数据量大&#xff0c;数据私密&#xff0c;因此将…...

使用 MobaXterm 链接 Ubuntu(Windows子系统)

MobaXterm_Personal_22.1 Ubuntu&#xff08;Windows子系统&#xff09;...

QT设计模式:代理模式

基本概念 代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你提供一个代理对象&#xff0c;以控制对其他对象的访问。 代理通常在客户端和实际对象之间充当中介&#xff0c;用于控制对实际对象的访问&#xff08;如登录控制&#xff09;…...

独热编码One-Hot是什么?在实际应用中具体是如何存储的?

One Hot编码是一种常用的文本或类别数据编码方式&#xff0c;尤其在自然语言处理和机器学习中。在One Hot编码中&#xff0c;每个词&#xff08;或类别&#xff09;会被表示为一个二进制的向量&#xff0c;这个向量的长度等于词汇表&#xff08;或类别总数&#xff09;的大小&a…...

计算机视觉与深度学习实战之以Python为工具:基于GUI搭建通用视频处理工具

注意:本文的下载教程,与以下文章的思路有相同点,也有不同点,最终目标只是让读者从多维度去熟练掌握本知识点。 下载教程:计算机视觉与深度学习实战-以MATLAB和Python为工具_基于GUI搭建通用视频处理工具_项目开发案例教程.pdf 一、引言 随着计算机视觉和深度学习技术的飞速…...

18.Docker学习

1.Docker应用场景 Docker借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地&#xff0c;Docker&#xff08;模板&#xff09;将软件运往各个环境&#xff08;测试环境和生产环境拉取镜像&#xff08;实例&#xff09;&#xff09;&#xff0c;相当于是一个模子刻出来的 …...

树莓派4b红外检测

1.红外检测连接图 2.红外检测工作原理 红外传感器的工作原理类似于物体检测传感器。该传感器包括一个红外LED和一个红外光电二极管&#xff0c;因此通过将这两者结合起来&#xff0c;可以形成一个光耦合器。 红外LED是一种发射红外辐射的发射器。该LED看起来与标准LED相似&a…...

大模型的不足与解决方案

文章目录 ⭐ 不具备记忆能力 上下文窗口受限⭐ 实时信息更新慢 新旧知识难区分⭐ 内部操作很灵活 外部系统难操作⭐ 无法为专业问题 提供靠谱的答案⭐ 解决方案的结果 各有不同的侧重 在前面三个章节呢&#xff0c;为大家从技术的角度介绍了大模型的历程与发展&#xff0c;也为…...

Java中使用FlatBuffers实现序列化

Java 中的 FlatBuffers有助于高速数据序列化/反序列化&#xff0c;消除解析开销。它由 Google 开发&#xff0c;为跨平台数据交换提供无模式、内存高效的解决方案。 Java 开发人员可以利用其直接内存访问来实现最佳性能和最小内存占用&#xff0c;从而提高应用程序速度、可扩展…...

[图解]SysML和EA建模住宅安全系统-02

1 00:00:00,900 --> 00:00:02,690 这个就是一个块定义图了 2 00:00:03,790 --> 00:00:04,780 简称BDD 3 00:00:05,610 --> 00:00:08,070 实际上就是UML里面的类图 4 00:00:08,080 --> 00:00:09,950 和组件图的一个结合体 5 00:00:13,150 --> 00:00:14,690 我…...

2024年北京服贸会媒体邀约资源有哪些?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 2024年北京服贸会&#xff08;中国国际服务贸易交易会&#xff0c;简称CIFTIS&#xff09;作为中国重要的国际性服务贸易盛会&#xff0c;会吸引众多媒体的关注和参与。媒体邀约资源通常…...

大语言模型LLM入门篇

大模型席卷全球&#xff0c;彷佛得模型者得天下。对于IT行业来说&#xff0c;以后可能没有各种软件了&#xff0c;只有各种各样的智体&#xff08;Agent&#xff09;调用各种各样的API。在这种大势下&#xff0c;笔者也阅读了很多大模型相关的资料&#xff0c;和很多新手一样&a…...

Alibaba Cloud Linux 安装mysql及注意事项

1.安装mysql #1.运行以下命令&#xff0c;更新YUM源。 sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm#2.&#xff08;可选&#xff09;当操作系统为Alibaba Cloud Linux 3时&#xff0c;执行如下命令&#xff0c;安装MySQL所需的库文件…...

设计模式——工厂模式(Factory)

工厂模式&#xff08;Factory Pattern&#xff09;是一种常用的设计模式&#xff0c;它提供了一种封装创建对象过程的方法。通过工厂方法或工厂类&#xff0c;你可以将对象的创建与使用分离&#xff0c;使得代码更加灵活和可维护。工厂模式主要分为三种类型&#xff1a;简单工厂…...

NVIDIA Omniverse Cloud API支持数字孪生开发,可解决复杂AI问题 | 最新快讯

在全球范围内&#xff0c;价值超过 50 万亿美元的重工业市场&#xff0c;正在竞相实现数字化。 基于此&#xff0c;为帮助数字孪生技术更好地赋能千行百业&#xff0c;AI 企业 NVIDIA 在架构底层算力的同时&#xff0c;也搭建了 NVIDIA AI Enterprise 和 Omniverse 两大平台。 …...

智慧电力,山海鲸引领

随着科技的不断进步和电力行业的快速发展&#xff0c;智能化管理已成为电力行业的重要趋势。在这一背景下&#xff0c;山海鲸智慧电力管理系统凭借其卓越的性能和创新的功能&#xff0c;为电力行业带来了革命性的改变。 山海鲸智慧电力管理系统是一套集数据采集、分析、展示于…...

【文章转载】ChatGPT 提示词十级技巧: 从新手到专家

学习了微博网友宝玉xp老师《ChatGPT 提示词十级技巧: 从新手到专家》 个人学习要点&#xff1a; 1、关于提示中避免使用否定句&#xff0c;播主说&#xff1a;“没有人能准确解释为什么&#xff0c;但大语言模型在你告诉它去做某事时&#xff0c;表现似乎比你让它不做某事时更…...

类的生命周期

目录 一、概述 二、加载阶段 三、连接阶段 连接阶段之验证 连接阶段之准备 连接阶段之解析 四、初始化阶段 五、总结 一、概述 类的生命周期描述了一个类加载、使用、卸载的整个过程。 也是其他知识的基础&#xff1a; 类的生命周期&#xff1a; 二、加载阶段 加载(Loading…...

AI赋能分层模式,解构未来,智领风潮

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自热榜文章&#x1f525;&#xff1a;探索设计模式的魅力&#xff1a;AI赋能分…...

Linux平台下muduo网络库源码编译安装与测试,包含boost库的安装与测试!!!!

最近在学习muduo网络库&#xff0c;先来记录一下如何在Linux平台下编译安装以及测试muduo网络库源码。 获取源码 muduo库源码github仓库地址&#xff1a; https://github.com/chenshuo/muduo 在linux系统下&#xff0c;输入 git clone https://github.com/chenshuo/muduo.git…...

MATLAB 函数

MATLAB 函数 函数是一起执行任务的一组语句。在MATLAB中&#xff0c;函数是在单独的文件中定义的。文件名和函数名应该相同。 函数在其自己的工作空间&#xff08;也称为本地工作空间&#xff09;中对变量进行操作&#xff0c;与在MATLAB命令提示符下访问的工作空间&#xff0…...

spring高级篇(七)

1、异常处理 在DispatcherServlet中&#xff0c;doDispatch(HttpServletRequest request, HttpServletResponse response) 方法用于进行任务处理&#xff1a; 在捕获到异常后没有立刻进行处理&#xff0c;而是先用一个局部变量dispatchException进行记录&#xff0c;然后统一由…...

根据token获取了username后,能否在其他地方使用这个获取的username,或者在其他地方如何获取username?

当然可以在其他地方使用获取到的用户名。一旦你从token中获取到用户名&#xff0c;你可以将其存储在能够在整个应用程序中访问的地方。 在你的代码中&#xff0c;你从token中获取用户名的地方是这里&#xff1a; String username getUsernameFromToken(token);在这行之后&am…...

值模板参数Value Template Parameters

模板通常使用类型作为参数&#xff0c;但它们也可以使用值。使用类型和可选名称声明一个值模板参数&#xff0c;方式与声明函数参数类似。值模板参数仅限于可以指定编译时常量的类型是bool、char、int等&#xff0c;但不允许使用浮点类型、字符串字面值和类。 #include <io…...

怎么做自助交易网站/网络营销推广活动有哪些

第1关:创建数据库和表 任务描述 本关任务:编写一个能计算数组平均值和最大值的小程序。 相关知识 为了完成本关任务,你需要掌握:1. SQLite数据库连接,2.创建数据库和表。 SQLite数据库连接 下面的例子显示了如何连接到一个现有的SQLite数据库。如果参数中指定的数据库不…...

属于b2b电子商务模式的平台有/seo排名优化seo

导读&#xff1a;什么样的区域对人才最具吸引力&#xff1f;广东海丝研究院推出的《广州11区人才吸引力指数报告》显示&#xff0c;广州11区中&#xff0c;天河区人才吸引力指数优势明显&#xff0c;位列第一&#xff0c;黄埔区、白云区、越秀区、南沙区紧随其后&#xff0c;海…...

北京的网站建设公司有哪些/苏州网站制作开发公司

谷歌于2015年正式推出的Kubernetes开源项目目前已经吸引了众多IT公司的关注&#xff0c;这些公司包括Redhat、CoreOS、IBM、惠普等知名IT公司&#xff0c;也包括国内如华为、时速云等公司。为什么Kubernetes会引发这么多公司的关注&#xff1f;最根本的原因是Kubernetes是新一代…...

css 网站模板/seo排名的公司

为什么要对css属性进行浏览器兼容性总结呢&#xff1f;用的时候&#xff0c;直接去 Can I Use 里面检索浏览器对该属性的兼容性情况不就好了吗&#xff1f;css3.jpeg其实&#xff0c;在实际的开发过程中&#xff0c;我们对常见的css属性兼容情况了然于胸&#xff0c;才能极大的…...

wordpress怎么添加文章/百度推广怎么看关键词排名

今天从同事那里发现个整理桌面的好东东---Fences&#xff0c;对于习惯把桌面当工作区的我来说&#xff0c;确实方便了许多&#xff0c;再也不用自己创建文件夹管理图标了 官网介绍 http://www.stardock.com/products/fences/ 免费下载 http://www.stardock.com/products/fences…...

网站大图轮播/南宁网站推广排名

题目 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”&#xff0c;要求按下列格式打印 ************ *****所谓“沙漏形状”&#xff0c;是指每行输出奇数个符号&#xff1b;各行符号中心对齐&#xff1b;相邻两行符号数差2&#xff1b;符号数先从大到小…...