news 2026/3/29 11:23:32

JMeter 实现 MQTT 协议压力测试 !

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JMeter 实现 MQTT 协议压力测试 !

1. 下载jmeter,解压

https://jmeter.apache.org/download_jmeter.cgi

以 5.4.3 为例,下载地址:

https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.4.3.zip

linux下解压:

unzip apache-jmeter-5.4.3.zip

2. 下载mqtt-jmeter插件

下载地址:

https://github.com/emqx/mqtt-jmeter/releases

https://github.com/emqx/mqtt-jmeter/releases/download/v2.0.2/mqtt-xmeter-2.0.2-jar-with-dependencies.jar

3. 将插件放置于jmeter的lib/ext目录下

windows/linux同样操作

4. 本文先在windows下生成的jmx脚本,然后传至linux下使用

新建两个线程组

  • 第一个仅包含一个 MQTT DisConnect,执行一次

  • 第二个里面包含具体的压测,开启1000个线程,1s内将线程创建完毕,无限循环。创建两个计数器,pub_counter用来技术发布消息数,thread_counter用来线程计数

事先创建1000个设备,名称为cosmoiottest000001 - cosmoiottest000001000(可自己定义)。添加一次性控制器(mqtt连接一次,后续pub消息),写上配置信息。

添加循环控制器,循环一次。包含固定定时器,休眠1000ms,一个发布MQTT Pub Sampler,即每个线程进来执行一次发布消息然后休眠1000ms进入下一次循环。每个消息包含100个点位(根据自己需要设置),每个点位随机生成一个整数。

添加观察结果树、汇总报告、聚合报告等,可在windows下面查看结果

配置截图如下:

  • 循环执行线程

  • pub_counter计数器

  • thread_counter计数器

  • mqtt connect设置:

  • MQTT发布消息:

5. linux压测命令:(需要先将bin/jmeter添加可执行权限)

  1. chmod +x bin/jmeter

  2. ./bin/jmeter -n -t mqtt_test.jmx -l result.jtl

6. 将结果jtl生成可视化报告,放置于result目录

  1. mkdir result

  2. ./bin/jmeter -g result.jtl -o result

将结果目录拉下来,点开即可查看图形化结果

注意可能遇到问题:

  • 执行jmeter压测后,进程不退出,编辑 jmeter.properties,打开配置

jmeterengine.force.system.exit=true

jmx文件传到linux后可能出错,建议英文环境下生成jmx文件,语言控制jmeter.properties

#language=en (默认英文,切换为中文为:zh_CN)
  • mqtt-jmeter 的jar包需要传至lib/ext目录,否则不可用

    生成报告时报错:

Consumer failed with message :Begin size 0 is not equal to fixed size 5

将jdk换成8版本

  • jtl结果文件,也可拉到windows,使用jmeter直接查看,新建线程组->聚合报告,选择jtl文件

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/23 19:45:32

PHP 8.4 vs 老版本:谁才是高并发场景下的王者?实测数据说话

第一章:PHP 8.4 性能对比旧版本提升概览 PHP 8.4 作为 PHP 语言的最新迭代版本,在性能优化方面带来了显著改进。相较于 PHP 7.4 和 PHP 8.0,新版本通过增强 Zend 引擎、优化内存管理机制以及引入更高效的 JIT(Just-In-Time&#x…

作者头像 李华
网站建设 2026/3/19 14:05:56

Laravel 12路由配置全解析(从入门到高阶实战)

第一章:Laravel 12路由配置全解析概述 在 Laravel 12 中,路由是应用的核心入口,负责将 HTTP 请求映射到相应的控制器或闭包函数。良好的路由配置不仅能提升开发效率,还能增强应用的安全性与可维护性。 路由文件结构 Laravel 的主…

作者头像 李华
网站建设 2026/3/25 13:35:58

PHP数组转JSON时中文变问号?5步精准定位并永久修复编码问题

第一章:PHP数组转JSON时中文乱码问题的根源剖析 在使用PHP将包含中文字符的数组转换为JSON格式时,开发者常遇到输出结果中中文显示为\uXXXX形式的Unicode编码,甚至出现乱码现象。这一问题并非源于PHP本身的缺陷,而是与JSON编码过程…

作者头像 李华
网站建设 2026/3/18 10:22:02

Laravel 12路由你真的会用吗:9个必须掌握的高级配置技巧

第一章:Laravel 12路由的核心概念与演进 Laravel 12 在路由系统上延续了其优雅简洁的设计哲学,同时引入了更高效的底层机制以提升性能和可维护性。路由作为应用请求的入口,负责将HTTP请求映射到相应的处理逻辑,是构建Web应用不可或…

作者头像 李华
网站建设 2026/3/27 6:29:21

【2026年】从 0 到 1:网络安全工程师完整学习路线(附技术栈 + 实操 + 职业规划)

引言 网络安全工程师的核心职责是 “搭建企业安全防护体系、监控并抵御网络攻击、保障数据与系统安全”,本质是网络安全的 “守护者”。与渗透测试侧重 “攻击模拟”、CTF 侧重 “解题竞赛” 不同,该岗位更聚焦 “防御落地、合规建设、日常运维”。这份…

作者头像 李华
网站建设 2026/3/26 22:14:21

PHP连接MySQL报错1045?:3分钟快速定位并解决Access denied错误

第一章:PHP连接MySQL报错1045的本质解析 错误代码1045是PHP连接MySQL数据库时常见的权限拒绝问题,其完整提示通常为“Access denied for user usernamehost (using password: YES|NO)”。该错误并非源于PHP代码本身,而是MySQL服务器拒绝了认证…

作者头像 李华