Jmeter TCP协议性能测试
最近有在做tcp协议性能测试,总结一下遇到的坑吧。

首先呢,我这边用的是16进制的报文:
(1)TCPClient classname:org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl
TCPClient classname 该参数一般有三个值设置:
- org.apache.jmeter.protocol.tcp.sampler.TCPClientImpl(以文本编辑器中的纯文本作为内容发送)
- org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl(以文本编辑器中所编辑的16进制字符(hex)内容为基础转换为二进制的字节内容进行发送)
- org.apache.jmeter.protocol.tcp.sampler.LengthPrefixedBinaryTCPClientImpl(在BinaryTCPClientImpl基础上默认以发送内容的长度以字节前缀进行填充)
(2)服务器IP和端口号:输入要压测的地址和端口即可
(3)超时:
单位毫秒,0 表示禁用超时
(4)Re-use connection:如果选中,这个链接处于保持打开状态,不选中就是读取数据后就关闭。
如果我们做TCP协议的性能测试,一个tcp连接肯定是要保持的,所以这里需要勾选
Close connection:如果选中,这个连接将在取样器运行结束后关闭
SO_LINGER:enable/disable(启用/禁用)SO_LINGER设置特定的值,单位为秒,它线性创建套接字,如果你是设置的值为0,你可以避免大量套接字处于TIME_WAIT (等待状态)
EOL:匹配响应报文最后一个字节,如果响应报文为16进制是最后两个字符,比如,在我的项目中返回值转为16进制的时候如下:
7e80010005013819415186010103e7020000d47e
那么最后一个字节 (8位)应该是 7e 换算为10进制后为126
那么在eol处设置为126 ReadException: 异常消除
下面说一下遇到的一些坑:
(1)在做TCP协议的性能测试时,尽量不要使用setup线程组和teardown线程组,因为我们要保持长连接,如果在setup线程组中我们发送了登入报文,在线程组中进行TCP其他报文的发送并循环的话,Jmeter不会认为这两个线程组是使用的同一个线程,导致在线程组中发送报文时会重新发起一个连接,而此时我们没有登入,导致场景错误,teardown也是如此。可以通过仅一次控制器解决这个问题
(2)行尾EOL匹配:在Jmeter处理机制中,当EOL匹配不到或者匹配值错误会认为这个连接失败,即使你勾选了re-use connection,也关闭这个TCP连接,但是在实际的应用场景中,很多报文上报之后是没有应答的,或者应答的内容是随机的(为了安全考虑),那么这个时候只能对Jmeter的TCP取样器进行二次开发,改变他的内部逻辑,让他的EOL如果无法匹配到也不会将我们的请求状态置为500,从而被关闭TCP连接。下面一步一步讲如何实现我们的需求
1、首先我们到Jmeter官网下载源码版本 https://archive.apache.org/dist/jmeter/source/ 下载source版本的zip格式,博主这边是Jmeter5.1.1,解压到本地目录
2、修改目录,这一步一定要做,不然无法导入,
进入解压后的目录,会看到两个文件:eclipse.classpath和eclipse.projecte,分别修改为 .classpath 和 .projecte;
在 windows 下不能直接修改,要使用 cmd 命令行;
打开 cmd 命令行窗口,进入解压的源码目录下,执行如下命令:
ren .eclipse.classpath .classpath
ren .eclipse.project .project
3、导入IDEA
点击File -> New -> Project from Existing Sources,选择Jmeter源码目录
选择按 eclipse 项目导入,如下所示:

其他全部默认,一直Next即可
4、ANT, 如果电脑没有ANT,可以去下载一个,然后配置下环境变量即可
在窗口右侧 Ant Build 中,点击 + ,选择源码目录下的 build.xml,会把所有相关信息展示在右侧列表中,

双击列表中的 download_jars ,会自动下载所有缺失 jar 包,到 jmeter 源码目录的 lib 目录下
5、更新项目依赖的jar包
在首次导入项目时,会自动在 dependency 下添加依赖 jar 包,但都是缺失状态,当我们用 Ant 下载好 jar 包后,IDEA 并不会自动更新,必须要手动更新。
在项目上右键打开 Open Module Settings,在项目 src 下点击 protocol 文件夹,再点击上方 Sources 按钮,点击 Apply。
点击 Dependencies,删除所有报错的 jar 包;
重新添加新下载的 jar 包:右侧 + ,选择 JARs or directories,依次选择源码目录下的 lib 目录和 lib 下的几个目录,最后 Apply :

6、ANT install
重新添加 jar 包后,必须执行 Ant install。
7、设置运行的VM options
JMeter 的启动类是 NewDriver,可以先找到这个类,尝试运行一下,肯定会报错找不到路径。
因为 jmeter 启动类中默认是去找的 parent 目录,所以报找不到路径,需要手动配置一下 jmeter 运行时的 home 路径,在 VM options 中配置。
在 VM options 填入 -Djmeter.home=C:\Users\Administrator\Desktop\apache-jmeter-5.1.1,如下所示:


此时,再次运行 NewDriver,就可以正常启动 jmeter 界面了!!
8、此时我们搜索TCPSample ,ctrl+n :

点击进入这个java文件,搜索ReadException:

修改红色框内容,至于为什么要设置为null,可以点进方法中自己看,在这就不过多说了。
9、最后执行build:

此时会多出一个文件夹,我们进入到文件夹中,找到编译好的TCPSampler.class文件

并复制出来
10、进入Jmeter\lib\ext的目录下,找到ApacheJMeter_tcp.jar 这个jar包,以压缩包形式打开,并找到TCPSampler.class文件,将我们修改过的class文件拖入并替换,这样大功告成,不会因为EOL没有匹配到连接就会断开,也不会置为500状态。
好了今天就先讲这么多,以后有时间再给大家分享
Jmeter TCP协议性能测试的更多相关文章
- 【JMeter4.0学习(三)】之SoapUI创建WebService接口模拟服务端以及JMeter对SOAP协议性能测试脚本开发
目录: 创建WebService接口模拟服务端 下载SoapUI 新建MathUtil.wsdl文件 创建一个SOAP项目 接口模拟服务端配置以及启动 JMeter对SOAP协议性能测试脚本开发 [阐 ...
- Jmeter测试TCP协议
最近做了个项目是TCP协议传输数据,于是马上想试试JMeter测试TCP. 1首先需要下载第三方的TCP插件包ApacheJMeter_tcp.jar,下载步骤请自行百度. 2.下载完重新配置jmet ...
- Jmeter+TCP\Scoket(8583)报文压力测试
Jmeter一般被用来测试HTTP协议,我第一次拿来测试socket协议,pos机传输报文为8583,协议属于socket,也是TCP协议的一种,网上有LR怎么测试8583报文,我就研究了一下怎么用J ...
- 为什么MOBA、“吃鸡”游戏不推荐用tcp协议——实测数据
欢迎大家前往云加社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯云游戏行业资深架构师 余国良 MOBA类和"吃鸡"游戏为什么对网络延迟要求高? 我们知道,不同类型的游戏因为玩法. ...
- Tsung测试Tcp协议的应用或接口
利用Tsung模拟基于Tcp的业务流程,实属无奈.因ConnectManager部署在linux下,其中,Loadrunner的winsocket因不支持linux platform而无法使用,而Jm ...
- tcp没用吗?为什么MOBA、“吃鸡”游戏不推荐用tcp协议
本文由云+社区发表 作者:腾讯云游戏行业资深架构师 余国良 MOBA类和"吃鸡"游戏为什么对网络延迟要求高? 我们知道,不同类型的游戏因为玩法.竞技程度不一样,采用的同步算法不一样 ...
- 搭建Jmeter + Grafana + InfluxDB性能测试监控环境
背景 Jmeter原生的实时监控每半分钟收集一次数据,只能在Linux控制台查看日志输出,界面看起来不直观,图表报告只能等压测结束后才能生成.如下图为jmeter在Linux下运行的实时日志: 那么如 ...
- Jmeter之tomcat性能测试+性能改进措施
Jmeter用于tomcat性能测试,因为项目部署在tomcat,正常情况下,一个tomcat可以承受500个并发,通过修改配置,及其相关的tomcat优化,可以承受到1000个并发. 如何测试tom ...
- Jmeter Http接口性能测试
Jmeter Http接口性能测试 1. 启动Jmeter Jmeter下载解压即可使用,Jmeter启动,点击D:\ProgramFiles\jmeter\apache-jmeter-2. ...
随机推荐
- python中获取文件路径的几种方式
# 如果执行文件为E:\aa\bb\aa.py 1.获取当前路径 current_path11 = os.path.abspath(__file__) current_path12 = os.path ...
- VS2019阅读源码 翻译注释插件
VS翻译插件: Comment Translator China https://marketplace.visualstudio.com/items?itemName=netcorevip.Comm ...
- Linux系统安装JDK8
一.卸载现用的JDK 1.查看Linux自带的JDK是否已安装 查看是否安装openjdk,java -version (yum安装的 一般都是 OpenJDK 命令:yum install ...
- Edit Static Web File Http Header Metadata of AWS S3 from SDK | SDK编程方式编辑储存在AWS S3中Web类文件的Http Header元数据
1.Motivation | 起因 A requirement from the product department requires download image from AWS S3 buck ...
- day45 如何完全删除mysql服务
卸载mysql之后,mysql的服务无法删除 解决方案 在我们在卸载mysql后会有一些东西没有删除干净,当我们把这些内容清除干净后,服务自然就消失了 步骤一: 如果是默认安装的话 在这三个文件内都有 ...
- 数据可视化之DAX篇(二十七)半累加度量,在Power BI 中轻松处理
https://zhuanlan.zhihu.com/p/96823622 开始半累加的计算之前,我们先看看什么是累加.半累加以及不可累加数据. 在含有大量行的数据表中,各种数据处理语言,包括DAX ...
- Python之爬虫(二十) Scrapy爬取所有知乎用户信息(上)
爬取的思路 首先我们应该找到一个账号,这个账号被关注的人和关注的人都相对比较多的,就是下图中金字塔顶端的人,然后通过爬取这个账号的信息后,再爬取他关注的人和被关注的人的账号信息,然后爬取被关注人的账号 ...
- Nginx to start, restart, shutdown and upgrade
1.start cd usr/local/nginx/sbin ./nginx 2.restart kill -HUP PID #主进程号或进程号文件路径 #或者使用 cd /usr/local/ng ...
- 计算机网络学习socket--day1
socket编程 socket可以看成是用户进程与内核网络协议栈的编程接口 socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信 socket全双工通信 在异构系统间进行通信 ...
- MySql-Binlog协议
MySQL主备复制原理 MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog e ...