今天我们介绍XMeter团队带来的新版MQTT-JMeter插件,您可以更为方便地添加MQTT连接、发布、订阅取样器,构造组合的应用场景,例如背景连接、多发少收、少发多收,计算消息转发时延等。利用该插件,我们为EMQ成功实施了包括百万级并发连接在内的一系列测试场景,这里有详细的测试报告。

该插件发布在github,欢迎下载、使用并告诉我们您的意见建议。

下面介绍一下插件的使用方法。
安装

从github下载您需要的release版本, 解压mqtt–xmeter-jar-with-dependencies.jar.zip, 将生成的jar文件放到JMeter安装主目录的lib/ext下,重启JMeter,就可以看到插件成功加载。

【注】推荐在最新的JMeter3.1或者3.0版本中安装使用本插件。
连接操作取样器

Server name or IP: 指向被测MQTT服务器地址。【注】为灵活起见,属性值都可以引用JMeter的系统或自定义变量。
Port number: 通常TCP连接的端口时1883, SSL连接则是8883。请参照服务器的具体配置。
Timeout(s): 连接超时设置,以秒为单位。
Protocols: 客户端与服务器通过SSL加密通道连接时,可以选择单向或者双向认证(Dual)。双向认证时,您还需要指定相应的信任秘钥库(Trust Key Store), 客户端证书,以及对应的文件保护密码(Secret)。这些文件可以通过服务器的证书配置转化得到。例如,对于EMQ的安装部署,<emqttd_home>/etc/cert下就存放了自签证的CA,服务器及客户端证书,参考下面的命令就可以生成插件所需的.jks, .p12文件,secret自行指定即可。

export PATH=$PATH:<JDK_HOME>/bin

keytool -import -alias cacert -keystore emqtt.jks -file cacert.pem -storepass <Your_Secret> -trustcacerts -noprompt

keytool -import -alias client -keystore emqtt.jks -file client-cert.pem -storepass <Your_Secret>

keytool -import -alias server -keystore emqtt.jks -file cert.pem -storepass <Your_Secret>

openssl pkcs12 -export -inkey client-key.pem -in client-cert.pem -out client.p12 -password pass:<Your_Secret>

User authentication: 如果服务器配置了用户认证,您需要提供相应的用户名和口令。
ClientId prefix: 标识客户端的固定前缀,每个连接(虚拟用户)再添加一个uuid串,整个作为客户标识。
Keep alive(s): 心跳信号发送间隔。例如,300表示客户端每隔300秒向服务器发出ping请求,以保持连接活跃。
Connection keep time(s): 连接建立后,保持该连接的时长。例如,1800表示1800秒之后连接将被关闭,即使一直发送心跳信号。
Connect attempt max: 第一次连接过程中,尝试重连的最大次数。超过该次数则认为连接失败。
Reconnect attempt max: 后继连接过程中,尝试重连的最大次数。超过该次数则认为连接失败。

发布操作取样器

发布(Pub)取样器的连接相关属性与连接取样器完全相同,下面只介绍Pub特有的属性。

QoS Level: 服务质量,取值为0,1,2,分别代表MQTT协议规范里的至多一次(AT_MOST_ONCE),至少一次(AT_LEAST_ONCE),精确一次(EXACTLY_ONCE)
Topic name: 发布消息所属的话题 (订阅方可以根据话题不同选择订阅)
Add timestamp in payload:如果勾选,发布的消息体开头会附带当前时间戳,利用它可以在消息接收端计算消息达到的延时。不勾选则只发送实际的消息体。
Message type: 目前支持三种消息类String: 普通字符串 (如上面截图所示)Hex String: 以16进制数值表示的串,比如字符串Hello, 可以表示为48656C6C6F (其中,48在ascii表中对应字母H,依次类推)。通常16进制串用来构造非文本的消息体,例如描述某些私有的协议交互和控制信息等等。Random string with fixed length: 按指定长度生成随机的串作为消息体。

订阅操作取样器

QoS Level: 服务质量,含义与发布操作取样器相同。
Topic name: 订阅消息所属的话题。
Payload includes timestamp: 如果勾选,会从消息体开头处解析发送时间戳,用于计算消息的接收延时。
Debug response: 如果勾选,消息内容会打印在JMeter的响应结果中,用于调试目的。正式运行测试建议不勾选。

混合负载的测试场景

运用以上3种MQTT取样器,结合JMeter灵活的测试控制,您可以制定各种类型的测试场景。下面我们举一个例子,构造一个混合负载的场景。

我们定义3个虚拟用户组,分别进行连接,发布,订阅操作。

连接者:虚拟用户数=10, 发起10个到服务器的背景连接,每2秒钟发一次心跳请求,15秒后断连。
发布者:虚拟用户数=5,每隔一秒发送一条32字节的随机串,带时间戳,循环10次结束。
订阅者:虚拟用户数=2,接收相应话题上的消息,每隔一秒输出采样间隔里接收到的消息统计,循环10次结束。

在JMeter中运行该场景,15秒钟左右运行结束。可以在测试结果树中看到每个操作的详细信息。表格视图的”Sample Time”列出了操作花费的时间(毫秒)。由于这次测试在本地,并发用户数很少,所以连接、消息发送、接收时延都很短。您可以指向实际的MQTT服务器,模拟更大的并发用户数。

结果树

结果列表
在被测的EMQ服务器自己的度量仪表盘,我们可以看到连接、消息发送,接收等统计信息。

【注】服务器的”received”, “sent”分别对应JMeter测试中的“发送者”和“订阅者”。


利用XMeter实施云上的高负载压力测试

JMeter支持的负载有限,而且压力机需要人工管理,为方便用户实施大规模的并发测试,XMeter性能测试云服务将JMeter支持的运行场景迁移到云端,按需“弹性”地分配测试资源,发起到目标机器的压力测试,衡量被测系统的性能表现。

我们只需上传调试好的JMeter脚本,在XMeter指定并发数和运行时间,就可以在网页上查看各项性能指标。

转载:运用MQTT-JMeter插件测试MQTT服务器性能相关推荐

  1. DICOM:基于JMeter+dcm4che2测试PACS服务器性能的解决方案(续篇)

    背景: 前一篇博文通过扩展JMeter的java请求,结合dcm4che2现有的工具包dcmsnd.bat实现了简单的测试DICOM服务器C-STORE SCP性能的尝试.由于借用了现有的dcmsnd ...

  2. DICOM:基于JMeter+dcm4che2测试PACS服务器性能的解决方案(前篇)

    背景: 目前对于传统WEB网站性能(压力/负载)的测试工具有很多,loadrunner.iperf.siege等,操作都比较简单,这里就不介绍了.然而对于医疗领域内的服务器,通常指的是DICOM服务器 ...

  3. jmeter压力测试及服务器性能监控

    1.jmeter 下载 Apache JMeter - Download Apache JMeter 2.  下载完成之后进行解压. 下载之后得到ZIP文件 解压之后程序文件夹,jmeter为解压程序 ...

  4. mqtt服务器性能H3,运用 MQTT-JMeter 插件测试 MQTT 服务器性能

    MQTT 简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是 IBM 开发的一个即时通讯协议,它比较适合于在低带宽.不可靠的网络的进行远程传感 ...

  5. 树莓派MQTT服务远程测试MQTT.fx

    陈拓 2021.04.07/2021.04.07 1. 概述 在<树莓派安装Mosquitto MQTT服务> https://zhuanlan.zhihu.com/p/359395794 ...

  6. 如何测试web服务器性能,如何执行Web服务器性能基准测试?

    本文概述 你知道你网站的平均响应时间吗?你知道你的网站可以处理多少个并发用户吗? 负载测试对于Web应用程序了解网站容量至关重要.如果要选择Web服务器, 那么要做的第一件事就是执行负载测试, 然后看 ...

  7. SPEC测试arm服务器性能,SPECJVM2008测试处理器性能_服务器评测与技术-中关村在线...

    首先,我们使用SPECJVM2008测试最新至强E5处理器的虚拟化性能. SPECJVM2008是一种通用的多线程Java基准测试工具,它能够反映JRE(Java Runtime Environmen ...

  8. 测试pppoe服务器性能,PPPOE服务器测试

    PPPOE服务器测试 说明一下,最好找另外一台在同一广播域上的计算机来测试,因为有很小的几率你在本机上测试成功了,但是网络上的计算机却不能连接.这可能是由于物理层的问题导致的,也可能是其他的问题,这里 ...

  9. 使用Jmeter批量测试视频链接可用性

    需求:有若干个m3u8视频链接,要求测试这些链接可用性,并将失效链接记录下来. 本文将简单介绍使用Jmeter来测试这些链接的可用性. 首先是处理数据,我们拿到的数据可能长下图那样 不过这些数据并不能 ...

最新文章

  1. 为什么说Netty是性能之王,因为它用了 Reactor 模型啊
  2. ES6—类的实现原理
  3. mysql 报错1005_MysqlERROR 1005错误处理
  4. @Autowired与@Resource
  5. VSCode编译Python环境搭建及发布Python应用
  6. 各类型商户微信认证方法
  7. 《jike--微服务架构核心20讲》笔记
  8. 奥特曼系列ol恶魔之花服务器,《奥特曼系列ol》依组麦鲁 培养攻略来袭
  9. 新买的笔记本电脑分区,笔记本分区分错了怎么重新分
  10. 【02】Java进阶:09-冒泡排序、选择排序、二分查找、异常、异常的产生和处理、自定义异常、多线程
  11. python多线程结束线程_Python多线程和Office第2部分
  12. html格式转换word清除格式,Word2010怎么清除格式?word清除格式(图文)教程
  13. Zero-Shot Learning学习笔记 -- CVPR_2022_MSDN: Mutually Semantic Distillation Network for Zero-Shot Learn
  14. 网上报修系统java源码_网上报修系统管理软件
  15. CCPC-Wannafly Winter Camp Day1 自闭总结
  16. FOURCC四字符码列表
  17. Unity丛林战争学习01_TCP_异步接受连接和异步接收消息
  18. Android新功能用户指引UserGuide
  19. 前端工程师必备收藏:学习资源全网罗
  20. 英雄联盟服务器乱码怎么修复,英雄联盟异常0.404.80070051解决方法

热门文章

  1. 量化私募江湖录:多少家?猜猜看?
  2. 分布式架构相关概念介绍
  3. AIOPS 学习之路
  4. vue3+tslint报错
  5. 吴恩达与 OpenAI 强强联手,《ChatGPT 提示工程》中英教程,来了!(附脑图笔记)
  6. 关于error LNK2001: unresolved external symbol
  7. 五一假期搭建个django后端项目
  8. SQL - SQL Server中如何取年、月、日 -DATEPART函数
  9. 证券从业资格考试考几门?一起考。还是分开考?
  10. 硕士_URL识别_工作