基于 Jmeter 压测 IoT 物联网平台的性能
原始链接 https://mp.weixin.qq.com/s/p2zYb5g4buoQwpnT-cBXPQ

背景 MQTT 是超轻量级消息协议,用于连接移动端与云服务双向通信,广泛应用于物联网(IoT)领域,如设备向云端上报状态、云端向设备推送消息、设备端 A 向设备端 B 发送消息等场景。本文以充电宝机柜上报状态场景为例介绍如何使用 MQTT 插件和 JMeter 脚本压测 IoT 物联网平台的 MQTT 服务性能。 准备工作 开通 IoT 物联网设备接入服务。https://www.aliyun.com/product/iot-deviceconnect安装 JMeter 5.1.1 版本 版本 https://jmeter.apache.org
压测实战
1.创建产品和注册设备
我们在 IoT 物联网平台设备管理中,创建一个充电宝产品,并注册 10 个设备,获得身份三元组。

2.准备设备身份信息 CSV 文件
每个设备和 IoT 物联网平台建立连接时,需要提供 UserName 、 Password 、 ClientId 这 3 个身份信息,上报状态数据时需要知道自身的 productKey 和 deviceName 来确定通信 Topic。依照 IoT 物联网平台身份认证文档,我们把三元组转换成 UserName 、 Password 、 ClientId,存储到 client.csv 文件中。示例如下:

3.下载 Jmeter ,安装 MQTT 插件
下载 mqtt-jmeter 插件最新版本 JAR 包:mqtt-xmeter-2.0.2-jar-with-dependencies.jar 。下载地址:https://github.com/emqx/mqtt-jmeter拷贝插件 JAR 包到 JMeter 安装目录的 lib/ext/
子目录下。操作过程如下:

4.编辑 JMeter 脚本
我们以 JMeter 5.1.1 英文图形界面为例。4.1 配置客户端 CSV 数据文件
打开 JMeter,并新建脚本。
在 JMeter 左侧文件目录中右键单击 Test Plan ,选择 Add > Threads (Users) > Thread Group。
在 JMeter 左侧文件目录中右键单击 Test Plan ,选择 Add > Listener > > View Results Tree ,添加 View Results Tree 监听器,方便本地调试测试脚本。
在 Test Plan 区域右键单击 Thread Group ,选择 Add > Logic Controller > Once Only Controller。JMeter 中一个线程模拟一个 MQTT 客户端设备,使用 Once Only Controller 保证一个线程仅读取一次客户端 CSV 数据文件,绑定一条客户端信息。
在 Test Plan 区域右键单击 Once Only Controller , 选择 Add > Config Element > CSV Data Set Config。并在 CSV Data Set Config 对话框中配置以下信息。

Filename :客户端信息 CSV 文件路径 client.csv
。File encoding:CSV 文件编码格式,本示例使用 UTF-8
。Delimiter:这里我们输入 #
。Recycle on EOF:是否循环读取文件。选择 False
。4.2 建立 MQTT 连接我们使用 Once Only Controller 控制一个客户端只需执行一次建连操作。
在 Test Plan 区域右键单击 Once Only Controller,选择 Add > Sampler > MQTT Connect。
在 MQTT Connect 对话框中配置以下信息。


4.3 配置发布消息
在 Test Plan 区域右键单击 Thread Group,选择 Add > Sampler > MQTT Pub Sampler
在 MQTT Pub Sampler 对话框中配置以下信息。

QoS Level:客户端向服务器发布消息的服务质量。本示例中选择 0
,即只发送一次,丢失不重发,可按需选择其他级别。Topic name:消息 topic 。MQTT topic 支持层次结构,使用 / 分割,类似文件路径,如 pts_test/jmeter
等。Add timestamp in payload:是否添加消息头添加发送时间戳。一般勾选此项,方便测试时检查消息延迟。Payloads:消息体。本示例中填写 this message is from jmeter ${clientId}!
,即在消息体中添加客户端 ID,方便测试和调试检查。4.4 启动压测脚本
在 Test Plan 区域单击 Thread Group,配置 Loop Count 为 10(循环执行 10 次)。
在 JMeter 页面左上角单击保存,然后执行脚本。
在 View Results Tree 页面查看脚本执行结果:

在 Summary Report 页面查看脚本执行结果:

在 Graph Results 页面查看脚本执行结果:

4.5 IoT 物联网平台控制台日志

评论