本文介绍如何使用JMeter压测MQTT服务,如何把脚本上传到coding上进行执行。
0 准备条件
- 安装JMeter 5.4.1版本
- 可以访问的MQTT服务
1 安装MQTT插件
1.1 mqtt插件下载地址
https://github.com/xmeter-net/mqtt-jmeter/releases
下载mqtt-jmeter插件最新版本JAR包:mqtt-xmeter-2.0.2-jar-with-dependencies.jar。
注意:1.0.1的版本,有些问题;建议使用2.0.2版本,拷贝插件JAR包到JMeter安装目录的lib/ext/子目录下
mqtt-jmeter插件放置成功后,打开jmeter,在sample中,能看到相应的MQTT Connect、MQTT DisConnect、MQTT Pub Sampler和MQTT Pub Sampler
2 准备客户端信息参数化txt文件
2.1 每个MQTT客户端需要提供以下信息
- 用户名(username)、密码(password)和客户端ID(ClientId)
2.2 测试数据生成方式
A、通过代码进行生成
B、通过Sublime Text
注意:先通过Ctrl A 全选;Ctrl Shift L 进入列选模式;使用方向键左右移动所有列的光标,并配合使用Shift键来多选每行的字符进行编辑
C、通过数据工厂
注意:需要事先把相应的MQTT客户端的信息根据业务逻辑,插入到数据库中。
3 编辑JMeter脚本
3.1 创建Thread Group
3.2 添加查看结果树和聚合报告
3.3 添加User Defined Variables
把ip和port做成参数化,方便后期不同环境的切换调试
3.4 创建Once Only Controller
JMeter中一个线程模拟一个MQTT客户端设备,MQTT是长连接,要保证一个线程仅读取一次参数化文件txt
3.5 创建CSV Data Set Config
3.6 创建MQTT连接
MQTT Connection
Server name or IP:MQTT的服务器域名或者ip,
Port number:MQTT的服务器端口号
MQTT version:MQTT的版本
TImeout(s):建立连接的超时秒数
Protocols:有证书的,Protocols需要选择SSL。无证书的情况,Protocols需要选择TCP。
Uer authentication
User name:用${username}
Password:用${password}
ClientId:用${clientId}
Add random suffix for ClientId:不勾选,默认不添加后缀
Keep alive(s):活动心跳间隔秒数,根据实际业务进行设置
注意:有证书的,Protocols需要选择SSL。无证书的情况,Protocols需要选择TCP。
3.7 配置发布消息
QoS Level:本示例中选择0,即只发送一次,丢失不重发,可按需选择其他级别。
- QoS 0:“最多一次”,消息发布完全依赖底层 TCP/IP 网络
- QoS 1:“至少一次”,确保消息可以到达,但消息可能会重复
- QoS 2:“只有一次”,确保消息只到达一次
Topic name:消息topic,如/report-property
Add timestamp in payload:选中此项,方便测试时检查消息延迟
Payloads:消息体,做了相应的参数化,方便测试
3.8 配置断言
if(!ResponseCode.equals("200")){
Failure = true;
FailureMessage="publish,返回码:" ResponseCode "n";
return;
}
3.9 配置监听
3.10 创建Constant Timer
在MQTT Pub Sampler中添加相应的间隔时间,如设置在间隔1s之后,发送相应的消息
3.11 创建MQTT Sub Sampler
QoS Level:本次选择0
Topic name:topic名称,如/report-property
Payload includes timestamp:是否在接收消息后从消息头解析发送时间,一般勾选
Sample on: 选择specified elapsed time (ms),值填写3000.表示持续接收消息3000毫秒
Debug response:测试环境方便调试用,正式环境压测,不勾选
4 使用coding压测MQTT消息
4.1 开通压测项目权限
找相应的人员开通项目权限
4.2 上传jmeter脚本和参数化文件
包括config、demo;其中config:放置集群的配置信息;demo:存放执行的脚本,有新建、重命名、上传、下载和删除的操作。
注意:用coding平台时,jmeter脚本中参数文件的路径,需要写成是/jmeter/XXXX.txt
4.3 构建计划
4.3.1 创建构建计划
4.3.2 选择模版
4.3.3 创建成功界面
4.4 分发参数化文件
4.4.1 在不同机器上放置不同的参数
点击【设置】
修改相应的集群配置、参数化文件和命名空间
执行
分发成功的界面
4.5 执行压测
4.5.1 点击设置
4.5.2 修改相应的集群配置、命名空间和脚本
4.5.3 执行测试
4.5.4 查看执行日志
点击【查看完整日志】