JMeter RabbitMQ采样器AMQP详解与实战

发表于:2019-1-29 08:04

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

 作者:王练    来源:51Testing软件测试网原创

  1摘要
  JMeter是性能测试中使用非常广泛的工具之一,其中让JMeter能够大放异彩的扩展插件异常重要。本文介绍测试RabbitMQ的扩展插件:AMQP采样器。不同于其他采样器,该插件的使用需要从源码中编译后使用。本文首先对RabbitMQ、AMQP、MQTT等基本概念进行了简要说明。之后将AMQP插件的安装过程,源码编译方法等进行详细说明。之后对该插件的使用方法进行详解,详细介绍采样器中每个字段的含义。最后通过一个实际的JMeter用例说明AMQP采样器的使用方法。
  本文虽然主要介绍AMQP采样器,其实也间接介绍了JMeter的插件知识,从这个角度来看,JMeter有非常好的扩展性,能够实现测试中非常丰富的需求。
  2关键字
  JMeter AMQP RabbitMQ
  3RabbitMQ简介
  要了解RabbitMQ,首先要了解几个基本概念:MQ、JMS、AMQP、MQTT。
  MQ是Message Queue的简称,即消息队列。队列我们可以理解为管道。以管道的方式做消息传递。消息传递作为基本通信机制已经在全世界成功运用。无论是人与人、机器与人还是机器与机器之间,消息传递一直都是唯一常用的通信方式。在双方(或更多)之间交换消息有两种基本机制。
  首先出现的是Java消息传递服务(Java Messaging Service (JMS))。JMS是最成功的异步消息传递技术之一。随着Java在许多大型企业应用中的使用,JMS就成为了企业系统的首选。它定义了构建消息传递系统的API。
  为了通用性,高级消息队列协议(Advanced Message Queueing Protocol (AMQP))应运而生。JMS非常棒而且人们也非常乐意使用它。微软开发了NMS(.NET消息传递服务)来支持他们的平台和编程语言,它效果还不错。但是碰到了互用性的问题。两套使用两种不同编程语言的程序如何通过它们的异步消息传递机制相互通信呢。此时就需要定义一个异步消息传递的通用标准。JMS或者NMS都没有标准的底层协议。它们可以在任何底层协议上运行,但是API是与编程语言绑定的。AMQP解决了这个问题,它使用了一套标准的底层协议,加入了许多其他特征来支持互用性,为现代应用丰富了消息传递需求。
  后来又出现了消息队列遥测传输(Message Queueing Telemetry Transport (MQTT))。已经有了面向基于Java的企业应用的JMS和面向所有其他应用需求的AMQP。为什么我们还需要第三种技术?它是专门为小设备设计的。计算性能不高的设备不能适应AMQP上的复杂操作,它们需要一种简单而且可互用的方式进行通信。这是MQTT的基本要求,而如今,MQTT是物联网(IOT)生态系统中主要成分之一。
  JMS、AMQP、MQTT都是MQ的协议,是需要遵循的一套标准。正如需要TCP/IP来实现OSI七层规范一样,真正在使用的是这些协议的实现。JMS本身有一套Java API可以实现JMS,同时ActiveMQ也支持JMS。事实上,现在流行的MQ实现,都支持多种协议,比如阿里巴巴的RocketMQ?,支持JMS、MQTT。
  今天介绍的?RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:PythonRuby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。作为一款优秀的AMQP实现,在很多系统中作为消息中间件使用。
  测试RabbitMQ在实际系统中的性能有很多方法,其中使用JMeter的AMQP插件是比较简单的实现方案。
  4插件安装说明
  JMeter插件安装非常简单,只要将扩展插件的jar包拷贝到\lib\ext文件夹下即可。不过AMQP插件只有源码,需要自行编译。
  首先在如下路径下载源码:
  https://github.com/jlavallee/JMeter-Rabbit-AMQP。
  如果安装了ant,并且了解ivy,可以直接使用工程的ivy.xml进行编译,生成JMeterAMQP.jar。或者根据ivy.xml的依赖配置,手工下载依赖的jar包,具体需要的jar如下:amqp-client-3.5.1.jar,ApacheJMeter_core.jar,
  avalon-logkit-2.0.jar,commons-codec-1.4.jar,
  commons-collections-3.2.1.jar,commons-httpclient-3.1.jar,
  commons-io-1.4.jar,commons-jexl-2.1.1.jar,
  commons-lang3-3.1.jar,commons-logging-1.1.1.jar,
  commons-net-1.4.1.jar,jorphan-2.6.jar。
  加入到build path后,编译生成JMeterAMQP.jar。
  之后将JMeterAMQP.jar拷贝到JMeter的\lib\ext路径。
  常见问题:拷贝JMeterAMQP.jar后,打开JMeter无法看到AMQP采样器,日志报错如下:
  需要将amqp-client-3.5.1.jar也拷贝到\lib\ext路径下。再次打开JMeter就可以添加AMQP采样器了。
  直接下载的AMQP插件自己的Publisher和Consumer传递消息没有问题,和其他组件配合使用时中文会出现乱码。修改源码中对消息体的获取,以Consumer为例,修改类com.zeroclue.jmeter.protocol.amqp.AMQPConsumer,将获取返回结果的代码修改如下内容:
  修改为:
  重新编译后替换JMeterAMQP.jar即可解决中文乱码问题。

  ......
查看更多精彩内容,请点击下载:
版权声明:本文出自《51测试天地》第五十二期。51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号