当前位置: 首页 > news >正文

【原创】MQTT开发笔记(四)- 压力测试

一、前言

       Jmeter 是 apache 公司基于 java 开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简 单。因为 jmeter 是 java 开发的,所以运行的时候必须先要安装 jdk 才可以。jmeter 是免安装的,拿到安装包之后直接解压就可以使用,同时它在 linux/windows/macos 上都可以使用。
jmeter 可以做接口测试和压力测试。其中接口测试的简单操作包括做 http 脚本(发 get/post 请求、加 cookie、加 header、加权 限认证、上传文件)、做 webservice 脚本、参数化、断言、关联(正则表达式提取器和处理 json-json path extractor)和 jmeter 操作数据库等等。

二、安装

1、下载 Jmeter & 解压

官网地址:Apache JMeter - Download Apache JMeter

Jmeter压测工具使用手册(完整版)

2、配置 Jmeter 环境变量

注意是系统变量表里直接添加,而不是用户环境变量,也不是在Path中。
按下面变量名和变量值配置 Jmeter 系统环境变量:


变量名1    :JMETER_HOME
变量名1值 :D:\Program Files\jmeter\apache-jmeter-4.0(jmeter 解压路径)
变量名2     :CLASSPATH
变量名2值 :% JMETER_HOME\lib\ext\ApacheJMeter_core.jar;% JMETER_HOME%\lib\jorphan.jar;% JMETER_HOME%\lib\logkit-2.0.jar;

3、安装MQTT插件

Jmeter中不包含Mqtt的测试,要单独安装一个Mqtt插件。

3.1、从 GitHub 上下载最新版本插件 mqtt-xmeter-2.0.2-jar-with-dependencies.jar,该插件支持 JMeter 3.2 及以上版本。

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


3.2、将插件 jar 包拷贝到 JMeter 的插件目录:/lib/ext

4. 启动

     Jmeter 解压路径下bin中的    jmeter.bat

三、使用

关于使用,网上有很多链接,讲的很全面,这里就不赘述了,主要参考:

Jmeter 压测工具使用手册(完整版) | Server 运维论坛

JMeter之MQTT请求_jmeter mqtt-CSDN博客

 

四、测试思路和解决方法

1. 控制器和配置

       在负载压力测试中,尽量连接和断开一次,使用“仅一次控制器”,把线程数和负载长度作为主要参数进行考核。

2. Java堆栈空间不够用

java: java.lang.OutOfMemoryError: Java heap space

        是由于线程过多或者Payload负载过大导致JVM虚拟机内存不够用,解决办法就是增加虚拟机内存。右键用记事本打开 jmeter.bat,修改-Xms1g -Xmx4g中的数字值,他们分别代表最小和最大值为1GB~4GB,当然你也可以改小为m(兆)的单位,这要根据你的需求来。以下是我的设置:

       set HEAP=-Xms1g -Xmx4g -XX:MaxMetaspaceSize=256m

3. 执行效率

       GUI界面是用来配置工程和Debug用的,他很耗资源,因此一旦配置好后,还是采用控制台执行测试比较贴合实际,通过以下命令就可以简单启动测试:

jmeter -n -t xxxxx.jmx

4. 状态异常

     java.lang.IllegalStateException: Current state = RESET, new state = FLUSHED

       测试中控制台的上述异常是mqtt-xmeter插件的线程池异常,不代表测试失败,不用管它,他会重新启动。我们只需要在控制台注意查看测试信息中的Err:是否为0%就好了。再用一个客户端去订阅测试中的Topic,看看是否能够接到数据,能接到说明测试没有中止。

       贴个Mqtt客户端的python代码给你:

pip install paho-mqtt
import paho.mqtt.client as mqttdef on_connect(client, userdata, flags, rc):print("Connected with result code " + str(rc))client.subscribe("test_topic", qos=1)def on_message(client, userdata, msg):print(msg.topic + " " + str(msg.payload))client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_messageclient.connect("xx.xx.xx.xx", 1883, 60)client.loop_forever()

相关文章:

  • 单片机基础入门:简单介绍51单片机的工作原理
  • 【原创 附源码】Flutter海外登录--Tiktok登录最详细流程
  • [论文总结] 深度学习在农业领域应用论文笔记12
  • 第十七篇【传奇开心果系列】Python的OpenCV库技术点案例示例:自适应阈值二值化处理图像提取文字
  • vue3 之 商城项目—一级分类
  • Python编写远程控制工具--被控端的编写
  • 哈工大团队顶刊发布!由单偏心电机驱动的爬行机器人实现多方向运动传递
  • DDoS攻击激增,分享高效可靠的DDoS防御方案
  • 使用Arcgis裁剪
  • HttpClient | 支持 HTTP 协议的客户端编程工具包
  • StringJoiner Sql拼接利器
  • Gradle IDEA 乱码
  • linux 下 chrome 无法在设置里面配置代理的解决方法
  • 标准库 STM32+EC11编码器+I2C ssd1306多级菜单例程
  • 【JAVA WEB】盒模型
  • 分享一款快速APP功能测试工具
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 03Go 类型总结
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Apache的80端口被占用以及访问时报错403
  • C# 免费离线人脸识别 2.0 Demo
  • CentOS7简单部署NFS
  • JAVA之继承和多态
  • Java知识点总结(JavaIO-打印流)
  • mongo索引构建
  • passportjs 源码分析
  • Quartz初级教程
  • RxJS: 简单入门
  • vue 个人积累(使用工具,组件)
  • 从零开始的无人驾驶 1
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 树莓派 - 使用须知
  • 用quicker-worker.js轻松跑一个大数据遍历
  • !!java web学习笔记(一到五)
  • #1014 : Trie树
  • #LLM入门|Prompt#3.3_存储_Memory
  • #vue3 实现前端下载excel文件模板功能
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (全注解开发)学习Spring-MVC的第三天
  • (四)JPA - JQPL 实现增删改查
  • (一)u-boot-nand.bin的下载
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)scrum常见工具列表
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复