乐于分享
好东西不私藏

grpc测试工具ghz的使用

grpc测试工具ghz的使用

前言

本文介绍grpc 测试工具 ghz的使用。水平不高,能力有限,错漏之处,还请见谅。欢迎友好讨论。

运行环境信息

  • 操作系统版本:ubuntu24.04

ghz简介

ghz是一个Go语言开发的gRPC性能测试和负载测试工具,可以进行

  • 性能测试:模拟大量并发请求,测量你的 gRPC 服务在不同负载下的表现,例如每秒能处理多少请求(QPS)、请求的平均耗时等 。
  • 负载测试:通过逐步增加请求压力(如每秒请求数RPS),观察服务性能的变化趋势,帮助发现性能瓶颈 。
  • 稳定性测试:长时间地向服务发送请求,验证服务在高负载或持续运行下的稳定性和可靠性。
  • 功能验证:在开发过程中,快速验证 gRPC 接口是否按预期工作,返回的数据是否正确。

ghz的github开源地址为:https://github.com/bojand/ghz,文档地址:https://ghz.sh/docs/intro。

ghz安装方法

我采用直接下载预编译的二进制文件进行安装,流程如下:

# 访问下载页面: https://github.com/bojand/ghz/releases, 下载对应操作系统版本的二进制文件, 比如ubuntu下wget https://github.com/bojand/ghz/releases/download/v0.121.0/ghz-linux-x86_64.tar.gz# 解压tar -xzf ghz-linux-x86_64.tar.gz

解压后可以发现两个可执行文件,ghzghz-web

  • ghz:主程序,负责执行压力测试,向你的 gRPC 服务发起请求,并收集性能数据。
  • ghz-web:可视化工具,负责将 ghz 生成的测试结果数据,以更友好、更直观的图表和表格形式在浏览器中展示出来。

ghzghz-web放到运行路径:

# 移动到/usr/local/bin/目录下sudo mv ghz ghz-web /usr/local/bin/# 验证安装成功ghz --version   # ghz版本ghz-web -v  # ghz-web版本

ghz的简单使用

简单使用指令,这里对C++ grpc 认证示例学习中的server_nossl服务器程序进行测试,测试指令如下:

# 压测grpc服务# --insecure: 测试非 TLS 的 gRPC 服务时使用# --proto: 指定 .proto 文件路径,用于解析服务和方法# --call: 指定要调用的完整方法名,格式为 包名.服务名.方法名# -d, --data: 请求消息的 JSON 格式数据# -c, --concurrency: 并发 Worker 数量,并非同时发起的请求数,而是工作协程数# -n, --total: 测试停止时,总共发出的请求数# -r, --rps: 限制每秒请求数(QPS),不设置则表示尽力而为, 这里没有设置# -z, --duration: 测试持续时间,到达设定时间后停止, 比如可以设置 -z 30s, 这里没有用到# -o, --output: 指定输出文件路径, 这里没有用到# -O, --format: 指定输出格式,如 html, json, csv, pretty 等, 这里没有用到ghz --insecure --proto ~/blog_code/auth/proto/hello_world.proto --call helloworld.Greeter.SayHello -d '{"name":"world"}' -c 1 -n 1000 localhost:50051

输出如下:

可以看到输出中包括测试总耗时,响应时间,qps,响应时间分布,结果状态码统计等信息。

ghz_web的简单使用

ghz_web的文档可以参考:https://ghz.sh/docs/web/intro

为了运行ghz_web,需要先设置一个配置文件,配置文件可以是YAML、TOML或者JSON格式。我这里用json格式,设置文件如下:

{"server": {"port"8990  },"database": {"type""sqlite3","connection""/home/ubuntu/tmp/ghz.db"  },"log": {"level""info"  }}
  • server-port:  ghz web服务端口,默认80
  • database: 数据库,支持sqlite3、mysql和postgres。默认是sqlite3
  • log: 日志设置,包括等级和路径(path)。默认等级是info,默认输出位置是stdout。我这里没有设置路径,直接在stdout输出日志。

设置之后,启动服务:

ghz-web -config ~/tmp/ghz_web_config.json

通过浏览器访问服务:

此时还没有数据,新建一个project:

可以看到新建的project :

可以看到我的项目的ID是2,这个后面上传数据要用到。

然后上传数据。首先要ghz测试的数据按照json格式输出,在 ghz的简单使用  一节中ghz的指令的基础上加上 -O json选项和-o report.json选项运行得到数据:

ghz --insecure --proto ~/blog_code/auth/proto/hello_world.proto --call helloworld.Greeter.SayHello -d '{"name":"world"}' -c 1 -n 1000 localhost:50051 -O json -o report.json

数据在当前文件夹的report.json文件中。

在服务器上执行curl指令,上传数据:

 curl -X POST http://localhost:8990/api/projects/2/ingest   -H "Content-Type: application/json"   -d @report.json  # 注意替换路径中的ID '2'为实际ID

注意上传路径 http://localhost:8990/api/projects/2/ingest中的2,指的是要上传到的项目ID,就是前面建立时在界面上看到的ID,替换成实际的即可。

上传完之后,在界面点击项目名,跳转到项目页面。

可以看到已经有数据了。

重复上面的动作,重新跑一组数据上传,则可以看到变化曲线。

我也只是初步使用,更多功能可以查看开源代码(https://github.com/bojand/ghz)或官方文档(https://ghz.sh/docs/intro)进行学习。后续我发现实用的功能也会持续分享。也欢迎有相关使用经验的读者在评论区进行分享。

参考资料

  • 腾讯元宝-deepseek(https://yuanbao.tencent.com/)和deepseek官方网站(https://www.deepseek.com/)辅助
  • https://github.com/bojand/ghz
  • https://ghz.sh/docs/intro

欢迎关注公众号:只做人间不老仙

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » grpc测试工具ghz的使用

猜你喜欢

  • 暂无文章