当前位置:网站首页>Rpc interface stress test
Rpc interface stress test
2022-08-10 05:03:00 【Yehenara Hermione】
前言
现今有比较多的rpc框架应用于实际的生产中,像比较流行的Dubbo、Motan、 Thrift、Grpc等.今天作者将以最近项目中用到的grpc为例,结合jmeter来介绍下rpc压测实施步骤.学习本文前需对rpc框架、jmeter有个大致的了解,知道rpc如何用工具生成各种语言的代码.Grpc本身是支持很多种语言的,而jmeter本身只支持java语言,因此我们的脚本也需要选用java.
步骤一:rpc脚本准备
先来看看我本地的项目目录,对结果有个大致的了解,我的工程里包含多个微服务(gnid、hdr等)的代码,每个微服务我建了一个包.这里只以gnid为例来说明:

1.IDE新建maven项目,修改pom.xml,加入grpc、jmeter的依赖包,以及grpc的代码生成插件

在src/main/java下新建目录(如命名proto),将项目的.proto文件copy进去,如图1中的gnid.proto
执行”maven install”,会生成相应的通信及服务代码

4.将图3中生成的代码copy到图1中的建的gnid包中去
- 编写rpc的client端的代码,如下图.在构造方法中初始化与server端的连接(这里的写法都是固定的).需要说明的是,接口多个参数赋值,可按照下图中2的方法进行(对check和sign两个参数赋值)

步骤二:java sample 脚本准备
- 编写jmeter的java sample代码.
关于jmeter的java sample脚本这里需要说明下:
创建一个类并实现JavaSamplerClient接口或继承bstractJavaSamplerClient,并重写如下几个方法:
public Arguments getDefaultParameters()://设置可用参数的默认值;
public void setupTest(JavaSamplerContext arg0)://每个线程测试前执行一次,做一些初始化工作;
public SampleResult runTest(JavaSamplerContext arg0)://开始测试,从arg0参数可以获得参数值;
public void teardownTest(JavaSamplerContext arg0)://测试结束时调用;


至此,脚本就准备好了.关于脚本还有如下几个点需要注意的:
a. rpc建立的是长连接,初始化服务端连接的代码应放在“setupTest”方法中,这样单个用户在执行期间都是复用该连接(实际生产中也是这么用的,建立连接的过程还是挺耗时的).同样, shutdown请求,放在teardownTest方法中即可

b. 通常一个rpc服务会包含多个接口,为了避免每个接口都写一个java sample请求,这里有个小技巧,可以在参数中增加一个字段,用于区分不同的接口

步骤三:将脚本打成可执行包,放到jmeter的\lib\ext\目录下
步骤四:启动jmeter,新建“线程组”,在线程组下新建java请求


选择测试类

填写在代码中设定的参数:

剩下的增加相应的断言、监听器、参数化(如需要),就可以像玩http一样开始压测了.
总结
本文重点介绍了两个方面的知识点.其一,rpc压测脚本如何写;其二,jmeter如何执行java sample请求.有问题的小伙伴,欢迎留言区交流~~
边栏推荐
- Unity Shader 积雪效果
- 线程(中):线程安全
- 电流探头如何设置示波器参数
- 【Web3 系列开发教程——创建你的第一个 NFT(7)】创建一个 NFT DApp,给你的 NFT 赋予属性,例如图片
- 各位大佬,idea中测试使用FlinkCDC SQL 读取Mysql 数据写入Kafka中,代码中创
- Unity实现UI的边缘检测和拖拽拉伸功能
- webrtc学习--websocket服务器(二) (web端播放h264)
- Acwing 59. 把数字翻译成字符串 计数类DP
- flex related
- An article to master the entire JVM, JVM ultra-detailed analysis!!!
猜你喜欢

webrtc学习--websocket服务器(二) (web端播放h264)

Flutter开发:报错The following assertion was thrown resolving an image codec:Unable to…的解决方法

2022年T电梯修理考试题及模拟考试

2022山东省安全员C证考试题及模拟考试

使用 DatePicker 日期控件,发生 Prop being mutated: “placement“ 报错问题

EasyGBS连接mysql数据库提示“can’t connect to mysql server”,该如何解决?

2022 R2 transportable pressure vessel filling operation examination question bank simulation platform

How Current Probes Set Oscilloscope Parameters

LeetCode·301.删除无效的括号·BFS

深度学习之-01
随机推荐
线性代数(四)
Guys, is it normal that the oracle archive log grows by 3G in 20 minutes after running cdc?
60行从零开始自己动手写FutureTask是什么体验?
【无标题】
JavsSE => 多态
Acwing 59. 把数字翻译成字符串 计数类DP
`id` bigint(20) unsigned NOT NULL COMMENT '数据库主键',
2022 R2 transportable pressure vessel filling operation examination question bank simulation platform
深度梳理:防止模型过拟合的方法汇总
什么是遗留代码:有效地处理遗留代码的8个小贴士
二进制中负数为何要用补码形式来表示——二进制加减法
Ueditor编辑器任意文件上传漏洞
ORA-16018 异常处理记录
flex 相关
【OpenCV图像处理4】算术与位运算
剑指Offer 033.变位数组
重要转型升级
From entry to mastery of PHPCMS imitation station, Xiaobai is enough to watch this set of courses
如何在不同场景下选择合适的示波器探头
软考考生注意!2022年下半年报名详细流程来了!