基于Jmeter工具进行MQTT性能测试
场景说明
随着物联网技术的发展,全球物联网设备连接规模与日俱增。大量设备接入和设备管理对网络带宽、通信协议以及平台服务架构都带来了很大挑战。IoT架构选型时,对平台进行性能测试显得尤为重要。本文介绍如何使用JMeter工具对平台的MQTT协议接入能力进行性能压测。
本文描述的测试方案如下:
测试场景:
- 模拟1万个设备同时在线,验证平台长连接的稳定性。
- 模拟设备每秒发起100次消息上报,验证平台消息处理能力。
测试环境:
- 压测目标平台:华为云设备接入服务SU2(1万设备在线、100TPS消息上下行)。
- 压测执行机:Jmeter执行机1台,规格如下:
实例类型 |
规格名称 |
vCPUs |
内存 |
---|---|---|---|
通用计算型s6 |
s6.xlarge.2 |
4vCPUs |
8GiB |
单台Jmeter执行机最多能模拟5万设备在线,如果需要模拟更高规格的在线设备数可以使用华为云的CPTS服务,部署多台Jmeter执行机,以满足规格测试的要求。
前期准备
业务流程
使用Jmeter工具对平台进行MQTT协议进行性能压测的具体流程如下:
- 创建产品。创建一个MQTT协议的产品。
- 批量注册设备。采用批量导入的方式注册1万个用于性能测试的设备。
- 导入测试计划。导入已经创建的用于IoT性能测试的测试计划。
- 发起压测。根据业务规格发起对平台的性能压测。
- 查看压测结果。在IoT平台上根据监控指标检查压测结果是否符合预期。
创建产品
- 登录管理控制台,单击左侧导航栏“产品”,单击页面左侧的“创建产品”。
- 根据页面提示填写参数,然后单击“确定”。
表2 参数说明 基本信息
所属资源空间
平台自动将新创建的产品归属在默认资源空间下。如需归属在其他资源空间下,下拉选择所属的资源空间。如无对应的资源空间,请先创建资源空间。
产品名称
自定义。支持字母、数字、下划线(_)、连字符(-)的字符组合。
协议类型
选择MQTT。
数据格式
选择JSON。
所属行业
请根据实际情况选择。
设备类型
请根据实际情况选择。
高级配置
产品ID
定制ProductID,用于唯一标识一个产品。如果携带此参数,平台将产品ID设置为该参数值;如果不携带此参数,产品ID在物联网平台创建产品后由平台分配获得。
导入测试计划
- 下载用于JMeter测试的测试计划。
- 打开JMeter,选择“Open”导入下载的测试计划。
- 在 JMeter左侧文件目录中单击 “User Defined Variables”,在 对话框中配置以下信息。
表4 参数说明 参数名
参数说明
server
MQTT协议服务端地址。获取方式参考获取接入地址。
port
MQTT协议端口,填写为8883。
productId
产品ID,创建产品时生成的产品ID。
password
MQTT连接密码。为使用“HMACSHA256”算法以时间戳为密钥对secret进行加密后的值。secret为批量注册设备时填写的密钥。可以通过工具获取加密后的值。
timeStamp
为对password进行加密的时间戳。时间格式为YYYYMMDDHH。
图2 参考样例
发起压测
- 在 JMeter 左侧文件目录中单击 “Thread Group”,配置“Number of Threads”为10000(一个线程对应一个设备在线,配置为10000表示设备与平台间保持1万个设备在线)。
图3 配置设备
- 在 JMeter 左侧文件目录“Thread Group”目录下单击"Delay between sampler" ,配置“Thread Delay(in milliseconds)”为100000(每设备每100秒发布一次消息)。
图4 配置设备
- 在Jmeter工具栏图表中单击(开始)按钮,启动性能测试。
图5 性能测试
- 在 JMeter 左侧文件目录中单击 “Summary Report”,可以看到“Connect”、"Publish Message"的吞吐量。可以通过调整“Number of Threads”和“Thread Delay(in milliseconds) ” 来调整Jmeter发起的吞吐量。
图6 性能测试
- JMeter测试计划调试正常后,可以将测试计划导入到华为云的CodeArts PerfTest服务,进行分布式部署以满足更高规格的性能测试 。