• 0
  • 1
分享
  • 基于Mqmeter插件对消息队列压测的实践
  • 恬恬圈 2020-03-24 10:50:21 字数 3205 阅读 3014 收藏 1

摘要:JMeter是性能测试中被普遍使用的一种工具,常用于压力测试。该工具具有丰富的扩展插件用以满足不同情况下性能测试的需求。消息队列(Message Queue)简称为MQ,作为目前的主流中间件,在很多软件或程序中均会得到使用,测试人员在测试过程中会遇到涉及MQ的系统改造,因而需要利用JMeter实现消息队列数据的发送和接收,完成性能测试工作。本文基于实际工作中遇到的项目情况,介绍了一种JMeter扩展插件Mqmeter的使用方法,完成消息队列的性能测试。

1、引言

消息队列是分布式系统中的重要组件,主要解决应用耦合,异步消息,流量削锋等问题,以实现高性能、高可用、可伸缩和最终一致性架构。作为大型分布式系统中不可缺少的中间件,目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ和RocketMQ等。

JMeter作为Apache的开源性能测试工具,支持多种服务类型的测试;同时允许使用者对其进行二次开发扩展,以插件的形式满足JMeter无法提供的定制化需求,目前网络上包含有多种开源插件可供测试人员使用。

本文结合实际测试工作中所遇到的消息队列测试需求,介绍了一种JMeter插件Mqmeter,该插件可用于在IMB MQ队列上放置和获取消息。它使用IP地址、端口号、用户名和密码通过服务器通道连接到MQ服务器。通过该插件,测试人员可以使用JMeter完成MQ的压力测试,通过该插件实现对MQ的多并发操作。

2、环境准备

JMeter的运行需要JAVA环境,Mqmeter插件源代码的编译需要Maven环境,本节将对Mqmeter插件使用过程中的运行环境部署加以详细的阐述。

2.1 环境架构说明

本文实际进行性能测试的架构如下,报文大概流向为:JMeter发送报文至小型机应用接口,小型机应该程序将消息报文写入MQ队列中,消息消费模块从MQ中获取并消费消息报文。

1.png

2.2 环境配置

JMeter运行需要Java环境,编译Java源代码形成jar包需要Maven,Maven运行也需要Java环境,具体JDK环境安装过程和Java环境变量配置不在此展开,如有需要可自行上网查询。

2.2.1Maven安装

Maven的下载地址:http://maven.apache.org/download.cgi,具体可根据已按安装的JDK版本选择相匹配的Maven版本下载,具体参考如下:

2.png

不同操作系统对应的下载文件如下:

3.png

Maven下载到本地后默认安装即可,关键需要配置环境变量,本文使用的是Windows操作系统,以Windows下环境变量配置为例进行环境变量配置介绍。具体步骤如下;

1)右键“计算机”,选择“属性>高级系统设置>环境变量,新建系统变量MAVEN_HOME,变量值:C:\Maven\apache-maven-3.6.3(即安装目录)。如下:

4.png

2)编辑系统变量Path,添加变量值:;%MAVEN_HOME%\bin。如下:

5.png

2.2.2Mqmeter插件安装

JMeter是一款开源的性能测试工具,功能强大,可扩展接口丰富。现有的JMeter插件对MQ消息队列进行性能测试体验稍差,本文采用GitHub上一开源项目形成的JMeter插件执行MQ消息队列的性能测试。该插件具体安装步骤如下:

1)Mqmeter源代码下载

GitHub下载链接:http://github.com/JoseLuisSR/mqmeter,将Mqmeter源代码下载并解压至本机,指定路径存放。

2)构建扩展包

命令行模式进入本机Mqmeter源代码目录下,执行命令:mvn package。

6.png

该命令完成了Mqmeter源代码的编译,单元测试和打包。利用源码构建可执行Jar包,构建过程如下图所示:

7.png

构建成功后会在源代码目录下生成一个target文件夹,如下图所示:

8.png

该文件夹中包含可执行jar包:mqmeter-2.0.1.jar

3)Mqmeter安装

将上步中生成的mqmeter-2.0.1.jar放置到“$JMeter_HOME/lib/ext”路径下,如图所示,至此Mqmeter的环境准备工作基本完成。

9.png

3、压测执行

本节主要说明利用Mqmeter插件执行性能测试过程中JMeter的使用和MQ消息队列的性能监控。

3.1 JMeter使用

Mqmeter的环境准备完成后,就可以在JMeter中使用该Java取样器发送消息报文。步骤如下:

1)进入JMeter安装目录apache-jmeter-5.0\bin,双击jmeter.bat启动JMeter,添加线程组;

10.png

2)在线程组中添加取样器,Mqmeter在取样器中名称为“Java Request”;

11.png

3)根据测试内容对取样器中的必填参数进行填写;

12.png

上图中各参数所代表的含义在此稍加解释:

  • mq_manager:MQ管理器名称,可以通过IBM WAS控制台获取。

  • mq_queue_rqst:放置消息的队列名称,可以是本地消息队列也可以是远程队列。

  • mq_queue_rsps:获取消息的队列名称,可以是本地消息队列也可以是远程队列,如果不想收到响应消息请将其置空。

  • mq_correlate_rsps_msg:将响应消息与请求消息相关联,从MQ队列中获取新的消息。如果不想收到响应消息,将其置空。

  • mq_wait_interval:设置get消息调用等待合适的消息到达的等待间隔。mq_hostname:运行MQ Server的主机名或IP地址。

  • mq_port:MQ服务器侦听器的端口号。

  • mq_channel:MQ服务器上的服务器通道名称。

  • mq_user_id:连接到MQ服务器通道的用户ID。

  • mq_user_password:连接到MQ服务器通道的用户密码。

  • mq_encoding_message:消息的字符编码标准:对于EBCDIC,请输入Cp1047,ASCII只需输入ASCII。

  • mq_message:消息内容。

4)从上步中能够看出,为提现Mqmeter插件的强大功能,本文对java request的配置页中的变量都进行了参数化,能够实现向不同MQ队列、不同的消息管理器发送不同的消息内容。具体参数配置过程:添加配置元件(Config Element)>用户自定义参数(User Defined Variable),各个参数具体填写如下:

1.png

5)汇总报告、TPS监听器、响应时间、查看结果树配置完成后即可开始测试。

至此性能测试发压机端的发压功能已部署完成。

3.2 MQ性能监控

MQ的性能测试过程中要不断查看MQ队列的深度,一是为了确保相关系统交易链路的可用性,二是定性的查看MQ本身的读写性能。而通过指令对MQ操作过于繁琐,本文将指令脚本化,大大节省了对MQ性能测试过程中的时间,也提高了效率。

本文MQ消息队列安装在IBM AIX小型机上,常用MQ操作有启动消息队列管理器【runmqsc test1】、查看队列深度【dis ql(MSGMB_1)】,同时需要关注队列深度字段【CURDEPTH】随时间的变化,脚本化如下:

2.png

实时输出如下:

3.png

4、总结

本文介绍了一种利用Mqmeter插件对MQ消息队列进行性能测试,并通过对UNIX指令脚本化实现对MQ的实时监控,详细介绍了Mqmeter从源代码生成JAR包,再到Jmeter使用该插件进行性能测试,希望能对从事MQ性能测试的同业人员有所帮助,同时本文还有诸多不足,诸如由于实际项目需求未介绍利用Mqmeter从消息队列取消息、未介绍量化性能的具体方法等等,后续如有实际项目需求会做进一步探索。


版权声明:本文出自51Testing会员投稿,51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 01 WEB自动化测试随着WEB程序的不断演化,WEB程序的功能愈发全面和完善。随之而来的,软件规模和复杂度与日俱增,系统内各组件之间的交互也愈发频繁,从而经常出现修改某一组件的代码,另一个组件功能出现意想不到的异常反应。这就要求测试人员执行大量的回归案例来解决这一问题,确保整个应用程序功能正常。日益复杂的系统和愈发严格用户体验,使得软件测试人员的测试任务愈发繁重。手工测试解决这一矛盾,需要投入大量的人力资源重复执行相似的测试步骤。客观上造成了人力资源的浪费。同时,由于测试人员技能的差异,使得软件测试质量不稳定也不可期。自动化测试是一种把人为驱动的测试行为转化为机器执行测试的方法。相较于传统的...
            1 1 1113
            分享
          • 1、引言小屌丝:鱼哥,你有没有监控Windows系统的工具小鱼:???小屌丝:我的Windows系统要做负载机, 我想监控负载机的性能,但是,不知道下载什么监控工具。小鱼:??小屌丝:我不想在负载机搭建一个监控系统,太费劲了。小鱼:??小屌丝:我觉得负载机,就应该用轻量级的监控工具,但是在网上找了好多,都没有合适的。小鱼:…小屌丝:你有没有好的工具,推荐一下。小鱼:Windows自带的性能监视器,小屌丝:鱼哥,别闹。小鱼:没闹。小屌丝:鱼哥, 你就推荐一个,都说你的电脑是百宝箱,啥都有,别不舍得给我哦。小鱼:给你了, 还不用安装, 就是Windows自带的性能监控器,小屌丝:这… 能用…吗? ...
            1 0 7643
            分享
          • 作为软件开发从业者,API 调试是必不可少的一项技能,在这方面 Postman 做的非常出色。但是在整个软件开发过程中,API 调试只是其中的一部分,还有很多事情 Postman 无法完成,或者无法高效完成,比如:API 文档定义、API Mock、API 自动化测试等等。Apifox 就是为了解决这个问题而生的。接口管理现状一、常用解决方案使用 Swagger 管理 API 文档使用 Postman 调试 API使用 MockJs 等工具 Mock API 数据使用 JMeter 做 API 自动化测试二、存在的问题维护不同工具之间数据一致性非常困难、低效。并且这里不仅仅是工作量的问题,更大...
            14 13 1044
            分享
          • 测试是软件开发生命周期 (SDLC) 的重要组成部分。SDLC 的每个阶段都应包含测试,以获得更快的反馈并提高产品质量。我们来聊聊持续测相关话题,如何从持续测试中获得更大的收益。何谓持续测试持续测试有助于在软件开发生命周期 (SDLC) 的所有阶段提供更快的质量反馈。在软件开发声明周期中大多数情况下,如果在核心功能逻辑越少做单元测试和自动化测试,那么测试金字塔顶层执行手动探索性测试的压力会非常大,尝尝容易出现质量问题导致项目延期。这实际上会影响质量,因为在开发完成后发现错误是非常昂贵的。下面是Google修复一个错误的成本,你可以看到当在系统测试阶段发现一个错误时,它的成本高达 5000 美元...
            0 0 1189
            分享
          • 前言:本篇讲堂是紧接【安全测试工具-进阶篇[敏感信息泄露和XXE漏洞]】的内容。例牌,先说下安全测试工具的更新情况【工具地址:https://gitee.com/samllpig/SafeTool-51testing】集成平台,增加自定义生成字典插件重放窗口增加PUT方法,修改发送JSON请求的问题漏洞讲解:所属模块: (A5) Broken Access Control [访问控制漏洞]6.1 菜单项: Insecure Direct Object References [不安全的直接对象引用],本章共6个小节6.1.1 第一节主题:不安全的直接对象引用简介内容:要知道什...
            0 0 86
            分享
      • 51testing软件测试圈微信