JMeter基础之使用JMeter测试Dubbo接口

发表于:2021-7-30 10:26

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:繁华似锦Fighting    来源:博客园

  1、Dubbo介绍
  (1)Dubbo说明
  Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
  简单的说:Dubbo一个高性能的,基于 Java 的,开源 RPC 框架。所以严格来说,Dubbo不是协议,而是一种分布式服务框架。
  (2)Dubbo运行原理
  Dubbo架构图如下所示:
  节点角色说明:
  Provider:暴露服务的服务提供方。
  Consumer:调用远程服务的服务消费方。
  Registry:服务注册与发现的注册中心。
  Monitor:统计服务的调用次数和调用时间的监控中心。
  Container:服务运行的容器。
  调用关系说明:
  1.运行服务的容器负责启动,加载,运行服务提供者。
  2.服务提供者在启动时,向注册中心注册自己提供的服务。
  3.服务消费者在启动时,向注册中心订阅自己所需的服务。
  4.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
  对上图进行说明:
  · 虚线都是异步访问,实线都是同步访问。
  · 紫色虚线:在启动时完成的功能。
  · 青色虚线(实线):都是程序运行过程中执行的功能。
  · 所有的角色都是可以在单独的服务器上。
  Dubbo简单的运行原理图:
  2、准备测试Dubbo接口的环境
  需要下载JMeter的Dubbo依赖JAR包,根据你Dubbo服务的版本,去选择对应的插件版本。
  例如:我的Dubbo是2.3.7版本,我需要的是jmeter-plugins-dubbo-2.7.1-jar-with-dependencies.jar。下载后放到JMeter安装目录中的lib/ext路径下。
  各版本下载地址:https://github.com/thubbo/jmeter-plugins-for-apache-dubbo/releases
  注意:如果放依赖包之前就已经启动了JMeter的话,需要重启JMeter。
  之后我就可以使用JMeter中的取样器元件,来发送支持Dubbo协议的请求。
  如下图所示:
  说明:
  我们在下载Dubbo的JAR包时候,会看到有两个JAR包:
  Jmeter-plugins-dubbo-2.7.1-jar-with-dependencies.jar
  Jmeter-plugins-dubbo-2.7.1.jar
  如果使用的是:jmeter-plugins-dubbo-${version}-jar-with-dependencies.jar
  此包中已含必要的依赖,推荐使用这个包。
  如果使用的是:jmeter-plugins-dubbo-${version}.jar
  需要自行添加插件的依赖包,所依赖JAR包的列表如下:
  dubbo-2.5.3.jar
  javassist-3.15.0-GA.jar
  zookeeper-3.4.6.jar
  zkclient-0.1.jar
  jline-0.9.94.jar
  netty-3.7.0-Final.jar
  slf4j-api-1.7.5.jar
  log4j-over-slf4j-1.7.5.jar
  3、Dubbo Sample界面详解
  Dubbo Sample组件添加方式:选中“线程组”右键 —> 添加 —> 取样器 —> Dubbo Sample。
  界面如下图所示:
  针对界面中各选项说明:
  名称:Dubbo Sample组件的自定义名称,见名知意最好。
  注释:即添加一些备注信息,对该Dubbo Sample组件的简短说明,以便后期回顾时查看。
  (1)Registry Settings:注册设置
  Protocol:注册协议,包括zookeeper、multicast、Redis、simple、none;
  Address:输入Dubbo注册地址,注册中心的IP+Port:
  1、当使用zookeeper,Address填入zookeeper地址,集群地址使用","分隔;
  2、当使用Dubbo直连的方式,Address填写直连地址和服务端口,且注册协议填none。
  Group:组类型,如果有的话,根据配置填写即可;
  Get Provider List:根据Address填写的地址,获取服务提供者的服务列表。(直连可以不选,其他都要选)
  1)点击Get Provider List后,会稍许有点卡。如果输入的Address填写不对,会卡死。
  2)根据实际情况选择Interfaces(接口)和Methods(方法)。
  (2)RPC Protocol Settings:RPC协议设置
  Protocol:使用的Dubbo协议,包括dubbo、rmi、hessian、webservice、memcached、redis,根据自己的协议类型,选择对应的选项即可。
  (3)Consumer&Service Settings:消费者和提供者设置
  Timeout:请求接口超时时间,单位ms,根据Dubbo具体配置填写;
  Version:版本,Dubbo不同版本之间差异较大,不同版本之间不能互相调用,这里指定Dubbo版本,是为了方便识别和说明;(一般无需填写)
  Retries:异常重试次数。类似这种分布式服务通信框架,大多都有重试机制,是为了保证事务成功率;
  Cluster:集群类型,包括failover、failfast、failsafe、failback、failking;
  Group:组类型,如果有的话,根据配置填写即可;
  Connections:连接数,同上,根据配置填写;
  Async:服务处理类型,包括sync(同步)、async(异步),根据配置填写;(现在都默认选择sync同步,目前所示样例都是同步接口)
  Loadbalance:负载均衡策略,包括random(随机)、roundrobin(轮询)、leastactive(最少活跃数)、consistenthash(一致性哈希);
  (4)Interface Settings:接口设置
  Interface:填写要请求的接口名。因为Dubbo服务大多是开发根据规范自行命名的,因此这里需要填写完整的接口名+包名;(如果选择了上面的Get Provider List,则无需填写,会自动回填)
  Method:当前接口下的方法名,按照开发提供的API文档填写即可;(如果选择了上面的Get Provider List,则无需填写,会自动回填)
  Args:接口参数,根据API文档填写,输入对应的参数类型和参数值即可;
  1)paramType:参数支持任何类型,可以直接使用java.lang下的包装类,如:int、float、shot、double、long、byte、boolean、char、String等。
  类型也可以是自定义对象POJO,需使用类的完全名称。
  2)paramValue:填写需要的参数值,例如:int为1,boolean为true等,自定义类与List或者Map等使用Json格式数据。
  4、Dubbo Sample组件的使用
  (1)测试计划内包含的元件
  添加元件操作步骤:
  创建测试计划。
  创建线程组:选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组。
  在线程组中,添加取样器Dubbo Sample组件:选中“线程组”右键 —> 添加 —> 取样器 —> Dubbo Sample。
  在线程组中,添加监听器“察看结果树”组件:选中“线程组”右键 —> 添加 —> 监听器 —> 察看结果树。
  最终测试计划中的元件如下:
  提示:下面介绍两种方式,来请求Dubbo 服务。
  (2)使用zookeeper协议请求Dubbo接口
  1)使用zookeeper协议调用Dubbo服务步骤:
  先获取zookeeper注册中心的地址,因为Dubbo服务都注册在这里。
  点击Get Provider List按钮,可以获得提供者的所提供服务的列表。
  选择要请求的接口与方法。
  填入对应的参数,发送请求。
  2)Dubbo接口信息说明:
  接口:com.example.provider.service.HelloFroParameterService:1.0.0
  方法名:sayHelloFroParameter
  参数类型:String,如果是自定义对象,填写对象的全名。
  参数值:字符串就行。
  填写好的Dubbo Sample请求内容,如下图所示:
  提示:其他选项我们暂时不用填写。
  3)补充说明:
  当点击Get Provider List按钮之后,会出现如下提示信息:
  意思是:获取所有提供者的服务列表,可能会导致 JMeter 停止响应几秒钟。 你要继续吗?
  我们点击是即可。
  然后停顿一会,会出现如下提示:
  意思是:提示你,获取提供者列表以完成! 检查日志是否有错误。
  这就证明我们获得提供者列表成功了。
  提示:
  如果10秒中都没有出现如上弹框,证明列表获取失败,可能是zookeeper地址填写错误,也可以能是服务有问题了。
  而此时JMeter界面是卡死状态,我们就需要强制关闭掉JMeter了,因为等再长时间也没有意义了。
  获取到提供者列表后,在Interfaces和Methods的下拉列表中就有内容了,我们可以选择需要调用的接口和方法。
  同时选择好的接口和方法,会同步到下面Interface Settings中的接口和方法的设置中。
  如下图所示:
  4)运行查看结果
  运行脚本,查看结果。
  我们可以看到,成功请求了Dubbo接口,并接收到了返回的数据。
  如下图所示:
  (3)使用直连的方式请求Dubbo接口
  直连方式与zookeeper连接方式不同,不需要到注册中心去分配一个提供者来提供服务,我们是直接链接某个提供者,去进行请求。
  1)使用直连方式调用Dubbo服务步骤:
  Protocol协议选择none。
  Dubbo接口填写直连地址:如:127.0.0.1:20880。
  填写接口地址:com.example.provider.service.HelloService:1.0.0
  填写调用的方法名:sayHello。
  请求一个不带参数的Dubbo接口,所以不需要填写参数。
  编辑完成,如下图所示:
  2)运行查看结果
  我们可以看到,成功请求了Dubbo接口,并接收到了返回的数据。
  如下图所示:
  以上就完成了JMeter对Dubbo接口的访问。

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号