如何在 JMeter 中使用开源 MQTT 插件

为了支持 MQTT 协议的负载测试,EMQ 开发了一个基于 JMeter 的开源 MQTT 协议测试插件。
1 位读者喜欢这篇文章。
Computer laptop in space

Opensource.com

之前的文章中,我介绍了 JMeter 如何内置支持 HTTP、HTTPS、TCP 和其他常用协议,并具有插件扩展机制。

通过插件,您可以支持更多内置功能,包括 MQTT。

MQTT 是物联网领域的主流协议。虽然它不是 JMeter 自带的协议类型,但在物联网测试场景中却非常常见。为了支持 MQTT 协议的负载测试,EMQ 开发了一个基于 JMeter 的开源 MQTT 协议测试插件。

本文介绍了如何在 JMeter 中使用 MQTT 插件。

在 JMeter 上安装 MQTT 插件

MQTT 插件的安装与其他 JMeter 第三方插件类似

  1. GitHub 下载最新版本的插件 mqtt-xmeter-2.0.2-jar-with-dependencies.jar。该插件支持 JMeter 3.2 及以上版本。
  2. 将插件 jar 包复制到 JMeter 的插件目录:$JMETER_HOME/lib/ext
  3. 重启 JMeter。

在撰写本文时,JMeter MQTT 插件支持多种取样器,例如连接、消息发布和消息订阅。

这些可以组合起来构建更复杂的测试场景。

MQTT 连接取样器

连接取样器模拟一个物联网设备并启动 MQTT 连接。

MQTT connect sampler interface

(尹崇元,CC BY-SA 4.0)

服务器名称或 IP: 被测 MQTT 服务器的地址。

端口号: 以 EMQX Broker 为例,TCP 连接的默认端口为 1883,SSL 连接的默认端口为 8883。具体端口请参考服务器的具体配置。

MQTT 版本: 目前支持 MQTT 3.1 和 3.1.1 版本。

超时: 连接超时设置,单位为秒。

协议: 支持与 MQTT 服务器的 TCP、SSL、WS 和 WSS 连接。当选择 SSL 或 WSS 加密通道连接时,可以选择单向或双向身份验证(双向)。如果需要双向身份验证,请指定相应的客户端证书(p12 证书)和相应的文件保护密码(Secret)。

用户身份验证: 如果 MQTT 服务器配置了用户身份验证,请提供相应的用户名和密码。

ClientId: 虚拟用户的身份标识。如果启用为 ClientId 添加随机后缀,则 UUID 字符串将作为后缀添加到每个 ClientId 和整个虚拟用户标识符。

保持连接: 发送心跳信号的间隔。例如,300 表示客户端每 300 秒向服务器发送 ping 请求以保持连接活动。

最大连接尝试次数: 首次连接期间的最大重连尝试次数。如果超过此次数,则认为连接失败。如果用户希望保持尝试重新连接,请将其设置为 -1。

最大重连尝试次数: 后续连接期间的最大重连尝试次数。如果超过此次数,则认为连接失败。如果用户希望保持尝试重新连接,请将其设置为 -1。

Clean session(清除会话): 当用户希望在连接之间保持会话状态时,将此选项设置为 false;当用户不希望在新连接中保持会话状态时,将其设置为 true。

MQTT 消息发布取样器 (MQTT Pub Sampler)

消息发布取样器重用在连接取样器中建立的 MQTT 连接,以将消息发布到目标 MQTT 服务器。

MQTT pub sampler interface

(尹崇元,CC BY-SA 4.0)

QoS Level(服务质量等级): 服务质量,取值为 0、1 和 2,分别代表 MQTT 协议规范中的 AT_MOST_ONCEAT_LEAST_ONCEEXACTLY_ONCE

Retained messages(保留消息): 如果您想使用保留消息,请将此选项设置为 true,以便 MQTT 服务器存储插件使用给定的 QoS 发布的保留消息。当在相应主题上发生订阅时,最后一条保留消息将直接传递给订阅者。因此,订阅者不必等待即可获得发布者的最新状态值。

Topic name(主题名称): 发布消息的主题。

Add timestamp in payload(在负载中添加时间戳): 如果启用,则当前时间戳将附加到发布的消息体的开头。与消息订阅取样器的Payload includes timestamp(负载包含时间戳)选项一起使用,可以计算消息在消息接收端到达的延迟时间。如果禁用,则仅发送实际消息体。

Payloads(负载)Message type(消息类型): 目前支持三种消息类型

  • 字符串:普通字符串。
  • Hex String(十六进制字符串):字符串以十六进制值表示,例如 Hello 可以表示为 48656C6C6F(其中 48 对应于 ASCII 表中的字母 H,依此类推)。通常,十六进制字符串用于构造非文本消息体,例如描述某些私有协议交互、控制信息等等。
  • 固定长度的随机字符串:生成指定长度(以字节为单位)的随机字符串作为消息体。

MQTT 消息订阅取样器 (MQTT Sub Sampler)

消息订阅取样器重用在连接取样器中建立的 MQTT 连接,以订阅来自目标 MQTT 服务器的消息。

MQTT sub sampler interface

(尹崇元,CC BY-SA 4.0)

QoS Level(服务质量等级): 服务质量,其含义与消息发布取样器中的含义相同。

Topic name(主题名称): 订阅消息所属的主题。单个消息订阅取样器可以订阅多个主题,以逗号分隔。

Payload includes timestamp(负载包含时间戳): 如果启用,则从消息体的开头解析时间戳,这可以与消息传递取样器的Add timestamp(添加时间戳)选项一起使用,以计算消息的接收延迟。如果禁用,则仅解析实际消息体。

Sample on(采样依据): 对于采样方法,默认值为specified elapsed time (ms)(指定经过时间(毫秒)),例如每毫秒采样一次。也可以选择number of received messages(接收消息数),例如每接收到指定数量的消息采样一次。

Debug response(调试响应): 如果选中,消息内容将打印在 JMeter 响应中。此选项主要用于调试目的。为了避免影响测试效率,不建议在正式运行时选中此选项。

MQTT 断开连接取样器 (MQTT DisConnect)

断开在连接取样器中建立的 MQTT 连接。

MQTT DisConnect interface

(尹崇元,CC BY-SA 4.0)

为了灵活性,上述取样器中的属性值可以引用 JMeter 的系统变量或自定义变量。

MQTT 和 JMeter

在本文中,我介绍了 JMeter MQTT 插件的各种测试组件。在另一篇文章中,我将详细讨论如何使用 MQTT 插件为不同的测试场景构建测试脚本。


本文最初发表于 How to Use the MQTT Plug-in in JMeter,经授权转载。

接下来阅读
Chongyuan
EMQ Technologies 的 XMeter 项目负责人,在测试工具方面拥有 10 多年的经验。 旨在为物联网协议和应用程序提供最佳的负载测试服务。 资深 Java 用户。

评论已关闭。

© . All rights reserved.