• 0
  • 0
分享

  现今有比较多的rpc框架应用于实际的生产中,像比较流行的Dubbo、Motan、 Thrift、Grpc等。今天作者将以最近项目中用到的grpc为例,结合jmeter来介绍下rpc压测实施步骤。学习本文前需对rpc框架、jmeter有个大致的了解,知道rpc如何用工具生成各种语言的代码。Grpc本身是支持很多种语言的,而jmeter本身只支持java语言,因此我们的脚本也需要选用java。

  步骤一:rpc脚本准备

  先来看看我本地的项目目录,对结果有个大致的了解,我的工程里包含多个微服务(gnid、hdr等)的代码,每个微服务我建了一个包。这里只以gnid为例来说明:

1-1.jpg


  1.IDE新建maven项目,修改pom.xml,加入grpc、jmeter的依赖包,以及grpc的代码生成插件<br style="box-sizing: border-box;"/>

1-2.jpg

  2. 在src/main/java下新建目录(如命名proto),将项目的.proto文件copy进去,如图1中的gnid.proto

  3. 执行”maven install”,会生成相应的通信及服务代码

1-3.jpg

  4.将图3中生成的代码copy到图1中的建的gnid包中去

  编写rpc的client端的代码,如下图。在构造方法中初始化与server端的连接(这里的写法都是固定的)。需要说明的是,接口多个参数赋值,可按照下图中2的方法进行(对check和sign两个参数赋值)

1-4.jpg

  步骤二:java sample 脚本准备

  1. 编写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)://测试结束时调用;

1-5.jpg

1-6.jpg

  至此,脚本就准备好了。关于脚本还有如下几个点需要注意的:

  a. rpc建立的是长连接,初始化服务端连接的代码应放在“setupTest”方法中,这样单个用户在执行期间都是复用该连接(实际生产中也是这么用的,建立连接的过程还是挺耗时的)。同样, shutdown请求,放在teardownTest方法中即可。

1-7.jpg

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

  <br style="box-sizing: border-box;"/>

1-8.jpg

  步骤三:将脚本打成可执行包,放到jmeter的\lib\ext\目录下。

  步骤四:启动jmeter,新建“线程组”,在线程组下新建java请求。

1-9.jpg

1-10.jpg

  选择测试类:

1-11.jpg

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

1-12.jpg

  剩下的增加相应的断言、监听器、参数化(如需要),就可以像玩http一样开始压测了。


作者:Tester_muller    

来源:http://www.51testing.com/html/42/n-7797342.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   在日常的测试工作中,不知道大家是否会有梳理自己测试业务的习惯。我个人觉得这个事情是值得做的,最好还可以培养成一个习惯。  一、为什么要梳理业务?  因为在业务测试中,作为测试人员,熟悉负责的业务是非常重要的,而通过阶段性的梳理总结,可以让你的业务知识系统化的沉淀下来。  当被问起这个业务系统的测试重点在哪里?难点如何克服?为什么要这样设计等等问题,可以有条不紊的进行输出。  又或者,当你任务需要交接,或者需要别人支援你的业务,你可以自信的把文档丢过去,拍拍胸脯说:看一遍你就知道了。  同样大家平时都在做业务,同样并没有多少别的技术层的产出,这也是为什么有人能拿A,有人却只能拿C的原因之一。...
            0 0 1085
            分享
          •   华为于 6 月 21 日在 HDC 2024 开发者大会带来全场景智能操作系统鸿蒙 HarmonyOS NEXT。  据介绍,鸿蒙 HarmonyOS NEXT 系统将在出行领域打造“人 + 车 + 家”协同出行体验。其内置的 HiCar 功能得到升级优化,将带来全新桌面设计、音乐 / 导航等功能交互。  同时新版 HiCar 还将采用分布式协议,将实现车机侧代码零修改效果。  HarmonyOS NEXT 版 HiCar 采用 ffrt 机制,连接流程阶段得到优化,实现核心体验提升 30%。  新版 HiCar 外观、交互得到升级优化。IT之家注意到,新版 HiCar 整体页面布局更像鸿...
            0 0 596
            分享
          • 读者提问:产品总是临时加需求,怎么办 ?阿常回答:大多数情况下需求变更是不可避免的,我们需要保持既开放又理性的心态,来拥抱需求变化,同时也要避免太多的需求变更。一、需求变更无法逃避需求变更是一把双刃剑,一方面需求变更可以优化产品功能,提升用户体验;另一方面需求变更给团队带来了开发成本的增加,并且会打击团队的士气。如果某个产品的最终形态就是产品最初的需求分析,没有经历过一次需求变更,这就可能有两种原因:其一,产品将所有细节都考虑到了,TA 是一位很牛的产品经理。其二,整个团队都在抵制需求变更,拒绝做任何产品功能的优化。二、如何控制需求变更当需求变更来临时,我们可以从工作流程上来控制:一...
            0 0 1093
            分享
          •   一、问题提出  项目现场人员经常会出现如下场景:  现场人员给家里支持人员打电话或发邮件:“系统发布失败,出现×××××错误,现场无法解决,错误日志已发过去了,请支持”。  支持人员看过日志,回复:“你把××××修改一下,重启下试试看好用不了”。  现场人员:“修改了,还是不好用……”  支持人员:“哦 ,那你在检查一下×××××配置的是否正确,看看是否哪配错了。”  现场人员:“都检查好几遍了,没发现错误……”  支持人员:“家里这边没有出现你这个问题啊,启动都正常”  现场人员:“那好吧,我再试试看吧……”  ……  上面只是举了一个简单的例子,项目实施过程中可能会遇到各种各样的问题,...
            0 0 1034
            分享
          •   作用域  之前也留下了一个问题。怎么给不同的请求设置不同的Header?后续也透露了可以使用Sample Controller,结合元件的作用域来实现。  在Jmeter中,元件的作用域是靠测试计划的树形结构中元件的父子关系来确定的,作用域的原则是:采样器(Sampler):不和其他元件相互作用,因为不存在作用域的问题逻辑控制器(Logic Controller):只对子节点的采样器和逻辑控制器起作用。  除采样器和逻辑控制器外的其他6类元件:如果是采样器的子节点,则只会对父节点(采样器)起作用除采样器和逻辑控制器外的其他6类元件:如果其父节点不是采样器,则作用域是父节点下的其他后代节点。...
            0 0 512
            分享
      • 51testing软件测试圈微信