如何在 JMeter 中使用 MQTT 插件

如何在 JMeter 中使用 MQTT 插件,第1张

JMeter 内置 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 插件来构建测试脚本。

插件安装: https://www.jianshu.com/p/bbef45209a1e

自定义线程组:jp@gc - Ultimate Thread Group,功能强大,可以实现多种场景设置,详细介绍见本文。

步骤:右键测试计划->添加->Threads(Users)->jp@gc - Ultimate Thread Group

Start Threads Count:当前行的线程总数,上图共10个线程

Initial Delay/sec:延时启动当前行的线程,单位:秒,上图延迟1秒

Startup Time/sec:启动当前行所有线程达峰值所需时间,单位:秒,上图10秒后达到峰值

Hold Load For/sec:当前行线程达到峰值后的稳定加载时间,单位:秒,上图达到峰值后持续10秒

Shutdown Time:停止当前行所有线程所需时间,单位:秒,上图10秒内结束所有线程

如图,可以总结其规律:线程行的start threads count 2^n依次增加,initial delay依次相差n秒,则hold load for则逆向相差n秒(即每个线程行的initial delay和hold load for之和都相等),其他的按情况设置。

如图,可以总结其规律:在第一线程行达到峰值后,第二线程行启动,n秒后全部启动,但是达到峰值后不持续,m秒内全部结束,以达到锯齿状场景。

一类是具备GUI的组件,即可以通过JMeter图形管理控制器在测试计划Tree中进行添加的组件,主要包括ThreadGroup(线程组)、Config(配置元件)、Timer(定时器)、Modifier(前置处理器)、Extractor(后置处理器)、Controller(逻辑控制器)、Sampler(测试抽样器)、Assertion(断言)和Listener(监听器);

另一类是非GUI组件,这类组件典型的代表是Function(函数)和某些子测试抽样器,如JavaSamplerClient。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11417096.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存