文档首页/ 设备接入 IoTDA/ 最佳实践/ 设备接入/ 基于Jmeter工具进行MQTT性能测试
更新时间:2024-07-30 GMT+08:00

基于Jmeter工具进行MQTT性能测试

场景说明

随着物联网技术的发展,全球物联网设备连接规模与日俱增。大量设备接入和设备管理对网络带宽、通信协议以及平台服务架构都带来了很大挑战。IoT架构选型时,对平台进行性能测试显得尤为重要。本文介绍如何使用JMeter工具对平台的MQTT协议接入能力进行性能压测。

本文描述的测试方案如下:

测试场景:

  • 模拟1万个设备同时在线,验证平台长连接的稳定性。
  • 模拟设备每秒发起100次消息上报,验证平台消息处理能力。

测试环境:

  • 压测目标平台:华为云设备接入服务SU2(1万设备在线、100TPS消息上下行)。
  • 压测执行机:Jmeter执行机1台,规格如下:
表1 压测执行机

实例类型

规格名称

vCPUs

内存

通用计算型s6

s6.xlarge.2

4vCPUs

8GiB

单台Jmeter执行机最多能模拟5万设备在线,如果需要模拟更高规格的在线设备数可以使用华为云的CPTS服务,部署多台Jmeter执行机,以满足规格测试的要求。

前提条件

  • 已注册华为账号并开通华为云。未注册可单击注册页面完成注册。
  • 已开通设备接入服务。未开通则访问设备接入服务,选择"购买实例",购买“SU2(1万设备在线、100TPS消息上下行)”。

前期准备

  • Jmeter执行机安装Java运行环境。访问Java官网,下载并参照说明安装Java运行环境。
  • 下载并安装JMeter (JMeter 应使用5.1.1及以上版本)。
  • 下载mqtt-jmeter 插件包,并将插件放置于JMeter安装目录的lib/ext目录下。

业务流程

使用Jmeter工具对平台进行MQTT协议进行性能压测的具体流程如下:

  1. 创建产品。创建一个MQTT协议的产品。
  2. 批量注册设备。采用批量导入的方式注册1万个用于性能测试的设备。
  3. 导入测试计划。导入已经创建的用于IoT性能测试的测试计划。
  4. 发起压测。根据业务规格发起对平台的性能压测。
  5. 查看压测结果。在IoT平台上根据监控指标检查压测结果是否符合预期。

创建产品

  1. 登录管理控制台,单击左侧导航栏“产品”,单击页面左侧的“创建产品”
  2. 根据页面提示填写参数,然后单击“确定”。

    表2 参数说明

    基本信息

    所属资源空间

    平台自动将新创建的产品归属在默认资源空间下。如需归属在其他资源空间下,下拉选择所属的资源空间。如无对应的资源空间,请先创建资源空间

    产品名称

    自定义。支持字母、数字、下划线(_)、连字符(-)的字符组合。

    协议类型

    选择MQTT。

    数据格式

    选择JSON。

    所属行业

    请根据实际情况选择。

    设备类型

    请根据实际情况选择。

    高级配置

    产品ID

    定制ProductID,用于唯一标识一个产品。如果携带此参数,平台将产品ID设置为该参数值;如果不携带此参数,产品ID在物联网平台创建产品后由平台分配获得。

批量注册设备

  1. 访问设备接入服务,单击“管理控制台”进入设备接入控制台。
  2. 在左侧导航栏选择设备 > 所有设备,进入“批量注册”页签,单击“批量注册”。
  3. 下载并填写“批量注册设备文件模板”,可以参照如下表进行参数填写。样例参考

    表3 参数说明

    参数名

    参数说明

    node_id

    设备标识,性能测试时可以按递增的方式进行填写,如10001,10002,10003

    product_id

    产品ID,创建产品时生成的产品ID。

    app_id

    资源空间,获取方式参考获取资源空间

    device_name

    设备名称,可以同node_id一致。

    secret

    设备密钥,性能测试时可以固定填写一个密钥。

  4. 在“批量注册设备窗口”单击“添加文件”上传写好的批量注册文件模板,单击“确定”创建任务。

    图1 设备-批量注册设备

  5. 批量注册执行成功后,保存好设备ID和密钥。

导入测试计划

  1. 下载用于JMeter测试的测试计划。
  2. 打开JMeter,选择“Open”导入下载的测试计划。
  3. 在 JMeter左侧文件目录中单击 “User Defined Variables”,在User Defined Variables对话框中配置以下信息。

    表4 参数说明

    参数名

    参数说明

    server

    MQTT协议服务端地址。获取方式参考获取接入地址

    port

    MQTT协议端口,填写为8883。

    productId

    产品ID,创建产品时生成的产品ID。

    password

    MQTT连接密码。为使用“HMACSHA256”算法以时间戳为密钥对secret进行加密后的值。secret为批量注册设备时填写的密钥。可以通过工具获取加密后的值。

    timeStamp

    为对password进行加密的时间戳。时间格式为YYYYMMDDHH。

    图2 参考样例

发起压测

  1. 在 JMeter 左侧文件目录中单击 “Thread Group”,配置“Number of Threads”为10000(一个线程对应一个设备在线,配置为10000表示设备与平台间保持1万个设备在线)。

    图3 配置设备

  2. 在 JMeter 左侧文件目录“Thread Group”目录下单击"Delay between sampler" ,配置“Thread Delay(in milliseconds)”为100000(每设备每100秒发布一次消息)。

    图4 配置设备

  3. 在Jmeter工具栏图表中单击(开始)按钮,启动性能测试。

    图5 性能测试

  4. 在 JMeter 左侧文件目录中单击 “Summary Report”,可以看到“Connect”、"Publish Message"的吞吐量。可以通过调整“Number of Threads”和“Thread Delay(in milliseconds) ” 来调整Jmeter发起的吞吐量。

    图6 性能测试

  5. JMeter测试计划调试正常后,可以将测试计划导入到华为云的CodeArts PerfTest服务,进行分布式部署以满足更高规格的性能测试 。

查看压测结果

  1. 登录管理控制台,在左侧导航栏“监控运维”->“统计报表”,查看平台的统计指标。
    图7 统计报表-查看统计报表
  2. 更多报表,可登录应用运维管理控制台,选择监控 >云服务监控 >物联网>IoTDA 查看。
    图8 查看指标