在智能家居、物联网领域,对MQTT broker的性能进行摸底时,需要压测MQTT服务器,这时候就可以选择使用Jmeter+MQTT插件的组合进行操作。
这里使用的Jmeter版本为【5.6.2】,使用的Jmeter MQTT插件为EMQX开源的emqx/mqtt-jmeter,版本号为【2.0.2】。

安装

在EMQX的【mqtt-jmeter插件release下载页面】下载最新版本的插件
notion image
然后将下载好的jar文件拷贝到 Jmeter 目录的 lib/ext 下。
notion image
重新启动Jmeter GUI客户端,在【取样器】下看到有【MQTT Connect】等四个取样器就是安装好了。
notion image

📝 基本使用

MQTT Connect 取样器

notion image

MQTT connection 设置项

  1. 服务器名称或IP地址:这是需要测试的 MQTT 目标,可以是 IP 地址或域名。默认值是 127.0.0.1。但是,不要在服务器名称或 IP 地址前添加协议前缀(如 tcp://ssl://)。
  1. 端口号:MQTT 服务器打开的端口。通常情况下,TCP 协议使用 1883 端口,SSL 协议使用 8883 端口。
  1. MQTT 版本:MQTT 的版本,支持 3.1 3.1.1
  1. 超时时间(秒):连接 MQTT 服务器时的连接超时时间。默认值是 10秒

MQTT Protocol 设置项

支持四种协议:TCP、SSL、WS、WSS。对于 SSL 和 WSS 协议,它包括普通 SSL 和双向 SSL 认证。
如果勾选了双向认证,需要正确配置证书
notion image

User authentication 设置项

用户可以配置 MQTT 服务器以使用用户名和密码进行认证。

Connection options 设置项

  1. ClientId:客户端标识,即虚拟用户或 JMeter 线程。默认值为 'conn_'。如果勾选了“添加随机客户端 ID 后缀”,JMeter 插件会在 'ClientId' 后追加生成的 uuid 以表示客户端,否则,'ClientId' 的文本将作为当前连接的 'clientId' 传递。
  1. 保持连接时间(秒):以秒为单位的 Ping 包发送间隔。默认值为 300,意味着每个连接每 5 分钟向 MQTT 服务器发送一次 Ping 包。
  1. 连接尝试次数上限:客户端首次尝试连接服务器之前,重新连接尝试的最大次数。设置为 -1 表示使用无限次尝试。默认值为 0。
  1. 重新连接尝试次数上限:在之前已建立过服务器连接后,重新连接尝试的最大次数。设置为 -1 表示使用无限次尝试。默认值也为 0。
  1. 清理会话:如果你想在会话之间保持状态信息,请设置为 false;否则,请设置为 true。
默认设置连接到MQTT broker后如图
notion image
在【查看结果树】里查看可以查看到正确连接的结果
notion image

MQTT Pub Sampler

notion image
发布(Pub)采样器重用之前由连接(Connect)采样器建立的连接来发布消息。如果此时连接未准备好,发布采样器将立即失败。

Pub options 设置项

  • 服务质量(QoS)等级:可用的 QoS 值,0 表示最多一次(AT_MOST_ONCE),1 表示至少一次(AT_LEAST_ONCE),2 表示恰好一次(EXACTLY_ONCE)。
  • 保留消息:如果发布采样器希望代理保留给定主题上的最后一条消息,以便订阅该主题的客户端在订阅后立即收到保留消息,则将其设置为 true。
  • 主题名称:消息将被发送到的主题的名称。
  • 在有效载荷中添加时间戳:是否在有效载荷中添加时间戳。如果启用了此复选框,则将在实际有效载荷之前添加运行发布采样器的时间戳。它通常与订阅(Sub)采样器一起使用,以计算消息延迟时间。发送的消息如图
notion image

Payloads 设置

  • 消息类型:可以使用三种类型的消息。
    • 字符串:发送到 MQTT 服务器的普通字符串。它也可以是一个 JMeter 变量。
    • 十六进制字符串:发送到 MQTT 服务器的十六进制字符串。输入的字符必须是 [0-9]、[A-F] 或 [a-f]。十六进制字符串将被转换为二进制并发送到服务器。它也可以是一个 JMeter 变量。
    • 固定长度的随机字符串:如下屏幕截图所示。如果选择了此选项,则要求用户输入“长度”。长度意味着自动生成的字符串长度。默认值为 1024,表示生成 1kb 大小的随机字符串。
notion image

MQTT Sub Sampler

notion image
订阅(Sub)采样器重用之前由连接(Connect)采样器建立的连接来订阅消息。如果此时连接未准备好,订阅采样器将立即失败。

Sub options 设置项

  • 服务质量(QoS)等级:可用的 QoS 值,0 表示最多一次(AT_MOST_ONCE),1 表示至少一次(AT_LEAST_ONCE),2 表示恰好一次(EXACTLY_ONCE)。
  • 主题名称:将订阅的主题名称列表(以逗号分隔),可以订阅多个主题。
  • 有效载荷包括时间戳:如果启用了此复选框,表示有效载荷包括时间戳。可用于计算消息延迟时间。
消息延迟时间计算公式:接收消息时订阅端的时间戳 - 发送消息时发布端的有效载荷内的时间戳
请注意,如果发布消息的机器与订阅者不是同一台,则计算出的消息延迟时间可能不准确。因为不同机器中的时间几乎不可能完全一致。因此,订阅采样器计算的延迟时间只能作为参考。
notion image
 
  • 采样方式:控制如何采样。默认值为 '按指定时间(毫秒)计时',意味着每经过指定的毫秒数(默认为1000ms)会发生一次订阅采样。在这1000毫秒内,可能会接收到多条消息,报告中的结果是这1000毫秒内的汇总数据。如果值设置为2000,表示2000毫秒内的汇总报告。另一个选项是 '接收到指定数量的消息',意味着在接收到指定数量的消息后将进行一次订阅采样(默认为1)。
  • 调试响应:如果勾选,接收到的消息将打印在响应中。在调试脚本时建议启用此选项。如图,如果不勾选,则不会显示红框中的数据。
notion image

MQTT DisConnect 取样器

清除之前创建的连接。
notion image

🤗 实用示例

在官方的【示例脚本】和官方博客介绍上,有介绍几个实用的示例。
  • background_connection.jmx:模拟与服务器的大量后台 MQTT 连接。 连接时您可以选择订阅主题。
notion image
notion image
  • pubsub_unidirection.jmx:演示子采样器如何从相应的 pub 采样器获取消息,具有两个 JMeter 用户组和操作之间的延迟。
notion image
notion image
  • pubsub_bidirection.jmx:演示一组设备和移动设备如何双向交换消息。
notion image
notion image
notion image
notion image

📎 参考链接

白嫖阿里云ECS搭建幻兽帕鲁私服JMeter 功能测试实战解析:探索接口测试的高级技巧
Loading...