如何在 JMeter 中使用 MQTT 插件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在 JMeter 中使用 MQTT 插件相关的知识,希望对你有一定的参考价值。
参考技术AJMeter 内置 HTTP/HTTPS、TCP 等支持多种协议,还具备插件扩展机制。
MQTT 协议作为物联网界的主流协议,虽然并非 JMeter 自带的协议类型,但在物联网测试场景中极为普遍。为了支持 MQTT 协议的规模测试,EMQ 映云科技开发了基于 JMeter 的 MQTT 协议开源测试插件: https://github.com/xmeter-net/mqtt-jmeter 。
经过几个版本的迭代,目前 JMeter MQTT 插件的最新版本为 2.0.2,支持连接、消息发布、消息订阅等多种采样器,并可通过组合构建更复杂的测试场景。
本文我们将具体介绍如何在 JMeter 中使用 MQTT 插件。
MQTT 插件的安装方式与其他 JMeter 第三方插件类似。
连接采样器模拟物联网设备,发起 MQTT 连接。
Server name or IP: 指向被测 MQTT 服务器地址。
Port number: 以 EMQ X 为例,默认 TCP 连接的端口是 1883, SSL 连接则是 8883。具体的端口请参照服务器的具体配置。
MQTT version : 目前支持 MQTT 3.1及3.1.1版本。
Timeout: 连接超时设置,以秒为单位。
Protocols: 支持TCP、SSL、WS 和 WSS 方式连接 MQTT 服务器。当选择 SSL 或 WSS 加密通道连接时,可以选择单向或者双向认证(Dual)。如果希望进行双向认证,还需要指定相应的客户端证书(p12证书),以及对应的文件保护密码(Secret)。
User authentication: 如果 MQTT 服务器配置了用户认证,需要提供相应的用户名( User name )和密码( Password )。
ClientId: 虚拟用户的标识。如果勾选了「Add random suffix for ClientId」,将会在 ClientId 的基础上给每个虚拟用户再添加一个 uuid 串作为后缀,整个作为虚拟用户标识。
Keep alive(s): 心跳信号发送间隔。例如,300 表示客户端每隔 300 秒向服务器发出 ping 请求,以保持连接活跃。
Connect attempt max: 第一次连接过程中,尝试重连的最大次数。超过该次数则认为连接失败。如果希望一直尝试重连,可以设为 -1。
Reconnect attempt max: 后继连接过程中,尝试重连的最大次数。超过该次数则认为连接失败。如果希望一直尝试重连,可以设为 -1。
Clean session : 如果希望在连接之间保留会话状态,可以将该选项设为 false。如果不希望在新的连接中保留会话状态,则将该项设为true。
消息发布采样器复用连接采样器中建立的 MQTT 连接,向目标 MQTT 服务器发布消息。
QoS Level: 服务质量,取值为 0,1,2,分别代表 MQTT 协议规范里的至多一次(AT_MOST_ONCE),至少一次(AT_LEAST_ONCE),精确一次(EXACTLY_ONCE)
Retained messages : 如果希望使用「保留消息」,可将该选项设为 true,MQTT 服务器端将会存储插件发布的保留消息及其 QoS,并在相应 topic 上发生订阅时,直接将最后一条保留消息投递给订阅端,使得订阅端不必等待即可获取发布端的最新状态值。
Topic name: 发布消息所属的主题。
Add timestamp in payload: 如果勾选,发布的消息体开头会附带当前时间戳,配合消息订阅采样器的 Payload includes timestamp 选项,可以在消息接收端计算消息达到的延时。如果不勾选则只发送实际的消息体。
Payloads Message type: 目前支持三种消息类型
消息发布采样器复用连接采样器中建立的 MQTT 连接,从目标 MQTT 服务器上订阅消息。
QoS Level: 服务质量,含义与消息发布采样器相同。
Topic name(s): 订阅消息所属的主题。支持单个消息订阅采样器订阅多个主题,主题之间用逗号分隔。
Payload includes timestamp: 如果勾选,会从消息体开头处解析发送时间戳,配合消息发布采样器的 Add timestamp in payload 选项,可以用于计算消息的接收延时。如果不勾选则只解析实际的消息体。
Sample on : 采样方式,默认为" specified elapsed time(ms) ",即每隔指定的毫秒时间采样一次。也可以选择" number of received messages ",即每接收到指定的消息数采样一次。
Debug response: 如果勾选,消息内容会打印在 JMeter 的响应结果中。该选项主要用于调试目的,正式运行测试不建议勾选,以免影响测试效率。
断开连接采样器中建立的 MQTT 连接。
本文我们介绍了 JMeter MQTT 插件的各测试组件,在下期文章中我们将针对不同的测试场景详细介绍如何用 MQTT 插件来构建测试脚本。
JMeter MQTT 在订阅与发布测试场景中的使用
通过之前的文章,相信大家已经熟悉了 JMeter 及 MQTT 插件的使用等基础知识。本文我们将介绍 JMeter MQTT 插件在订阅与发布测试场景中的使用。
订阅、发布场景介绍
发布场景
使用 MQTT Connect 请求模拟设备与 MQTT 服务器(本文以 EMQX 为例)建立连接,随后使用MQTT Pub Sampler 请求模拟设备发布消息到 MQTT Broker,在 MQTT Pub Sampler 后添加固定定时器模拟定时发布消息。
订阅发布场景
使用 MQTT Connect 请求模拟与 MQTT Broker 建立连接,其中订阅者订阅指定主题,发布者发布消息到指定主题。
使用 MQTT 插件编写测试脚本
发布脚本
- 在测试计划下创建线程组。
- 在线程组下添加仅一次控制器及“MQTT 连接采样器”(即"MQTT Connect")。
- 在 MQTT 连接采样器后添加 MQTT Pub Sampler,用于发布消息。
- QoS Level 为消息级别,支持0、1、2
- Retained Mesages 为是否保留消息,支持 true、false
- Topic name 为主题名称
- Add timestamp in payload 在报文中加入时间戳
- Message type : String 可填写自定义字符串报文
- Message type : Hex string 可填写自定义十六进制报文
- Message type : Randmom string with fixed length 为固定长度随机字符,后面Length为指定长度
- 在 MQTT Pub Sampler 下添加“固定定时器”,用于控制发布消息频率。
订阅脚本
- 在测试计划下增加线程组。
- 在线程组下添加仅一次控制器及“MQTT 连接采样器”(即"MQTT Connect")
- 在 MQTT Connect 后添加 MQTT Sub Sampler,模拟订阅消息。
- Qos Level 消息级别,支持0、1、2
- Topic name(s) 订阅主题名称,支持+/#通配符共享订阅
- Payload includes timestamp 报文是否包含时间戳
- Sample on : specified elapsed time(ms) 按毫秒时间统计订阅到消息
- Sample on : number of received messages 按次数统计订阅到消息
- Debug response 调试返回信息,即在察看结果树中显示详细订阅报文
测试的执行
对编写好的脚本进行调试验证,确认 MQTT Broker 的连通性及脚本运行逻辑是否符合预期。
将线程组页面的线程组数分别修改为 50,设置循环次数为 1000,页面点击 Start 按钮执行测试。
查看测试结果,点击“察看结果树”可查看发布及订阅报文内容。
从汇总报告看出 Pub 和 Sub 吞吐量为 161.5/s,50 发布者与 50 订阅者消息数都是 50*1000,即发布订阅吞吐与消息数量都一致。
登录 EMQX Dashboard 页面,显示如下:
附件
读者可下载测试脚本运行并查看结果。
本系列中的其它文章
- 开源测试工具 JMeter 介绍 - 物联网大并发测试实战 01
- JMeter 测试组件介绍 - 物联网大并发测试实战 02
- 如何在 JMeter 中使用 MQTT 插件 - 物联网大并发测试实战 03
- JMeter MQTT 在连接测试场景中的使用 - 物联网大并发测试实战 04
版权声明: 本文为 EMQ 原创,转载请注明出处。
原文链接:https://www.emqx.com/zh/blog/the-use-of-jmeter-mqtt-in-subscription-and-publishing-test-scenarios
以上是关于如何在 JMeter 中使用 MQTT 插件的主要内容,如果未能解决你的问题,请参考以下文章