grpc压力测试
通过ghz来对grpc接口进行压力测.
ghz是通过golang开发的针对grpc的压测工具,ghz基于proto或者protoset来发起grpc调用,类似常规的测试(ABtest),可以指定并发量,请求总数,请求频率。
并且能够输出html,csv,json,prometheus等让我们更加直观的看到接口接口性能情况.
链接
官方文档 github
windows安装以及踩坑
用下载好的zip也可以去 下载地址 不同的版本,我目前只在windows上使用.
使用protoc
ghz可以通过proto文件也可以通过protoset调用grpc服务. 我个人推荐使用protoset,因为提前使用protoc编译好了的protoset文件可以让ghz调用不用考虑到proto文件的一些引用问题.
protoc --include_imports -I . --descriptor_set_out=bundle.protoset *.proto
注意使用 –include_imports 不然很多依赖的proto不会编译进来
使用ghz执行测试
之后我们就可以使用ghz
解压配置并且配置环境变量
基于protoset执行测试
简单的调用
ghz --insecure --protoset bundle.protoset --call Service.method 127.0.0.1:7999
常用指令
--skipFirst grpc最好第一个跳过,因为比较慢
--insecure 使用文本和非安全的连接
-r|--rps=0 rps的速率限制,默认没有限制
-c|--concurrency 指定并发数量 默认50
-n| --total 一共请求的数量 默认200
-d|--data 通过json的方式发送请求报文
-D|--data-file 指定json文件调用数据
-o|--output 输出路径
-O|--format 输出的格式 summary, csv, json, pretty, html, influx-summary, influx-details
调用相关:
--protoset 指定protoset文件
-i | --import-paths 指定proto文件的路径(用protoset不需要使用)
--call 指点调用的方法(package.Service/Method' 或者 'package.Service.Method' )
输出结果
- count - 包含成功和失败的全部请求数量.
- total - 从开始到结束的全部时间.
- slowest - 最慢的请求
- fastest - 最快的请求
- average - 平均请求数量
- requests/sec - rps
通过-O 输出html等
ghz --insecure -o test.html -O html --protoset bundle.protoset --call Service.method 127.0.0.1:7999
|