最近有在做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协议性能测试的更多相关文章

  1. 【JMeter4.0学习(三)】之SoapUI创建WebService接口模拟服务端以及JMeter对SOAP协议性能测试脚本开发

    目录: 创建WebService接口模拟服务端 下载SoapUI 新建MathUtil.wsdl文件 创建一个SOAP项目 接口模拟服务端配置以及启动 JMeter对SOAP协议性能测试脚本开发 [阐 ...

  2. Jmeter测试TCP协议

    最近做了个项目是TCP协议传输数据,于是马上想试试JMeter测试TCP. 1首先需要下载第三方的TCP插件包ApacheJMeter_tcp.jar,下载步骤请自行百度. 2.下载完重新配置jmet ...

  3. Jmeter+TCP\Scoket(8583)报文压力测试

    Jmeter一般被用来测试HTTP协议,我第一次拿来测试socket协议,pos机传输报文为8583,协议属于socket,也是TCP协议的一种,网上有LR怎么测试8583报文,我就研究了一下怎么用J ...

  4. 为什么MOBA、“吃鸡”游戏不推荐用tcp协议——实测数据

    欢迎大家前往云加社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯云游戏行业资深架构师 余国良 MOBA类和"吃鸡"游戏为什么对网络延迟要求高? 我们知道,不同类型的游戏因为玩法. ...

  5. Tsung测试Tcp协议的应用或接口

    利用Tsung模拟基于Tcp的业务流程,实属无奈.因ConnectManager部署在linux下,其中,Loadrunner的winsocket因不支持linux platform而无法使用,而Jm ...

  6. tcp没用吗?为什么MOBA、“吃鸡”游戏不推荐用tcp协议

    本文由云+社区发表 作者:腾讯云游戏行业资深架构师 余国良 MOBA类和"吃鸡"游戏为什么对网络延迟要求高? 我们知道,不同类型的游戏因为玩法.竞技程度不一样,采用的同步算法不一样 ...

  7. 搭建Jmeter + Grafana + InfluxDB性能测试监控环境

    背景 Jmeter原生的实时监控每半分钟收集一次数据,只能在Linux控制台查看日志输出,界面看起来不直观,图表报告只能等压测结束后才能生成.如下图为jmeter在Linux下运行的实时日志: 那么如 ...

  8. Jmeter之tomcat性能测试+性能改进措施

    Jmeter用于tomcat性能测试,因为项目部署在tomcat,正常情况下,一个tomcat可以承受500个并发,通过修改配置,及其相关的tomcat优化,可以承受到1000个并发. 如何测试tom ...

  9. Jmeter Http接口性能测试

    Jmeter Http接口性能测试 1.      启动Jmeter Jmeter下载解压即可使用,Jmeter启动,点击D:\ProgramFiles\jmeter\apache-jmeter-2. ...

随机推荐

  1. Code Forces 796C Bank Hacking(贪心)

    Code Forces 796C Bank Hacking 题目大意 给一棵树,有\(n\)个点,\(n-1\)条边,现在让你决策出一个点作为起点,去掉这个点,然后这个点连接的所有点权值+=1,然后再 ...

  2. Django---进阶15

    目录 文章详情页 文章点赞点踩 文章评论 文章详情页 # url设计 /username/article/1 # 先验证url是否会被其他url顶替 # 文章详情页和个人站点基本一致 所以用模版继承 ...

  3. [JAVA]SLF4J及其实现类框架使用简介

    SLF4J介绍 SLF4J是Simple Logging Facade for Java 的简写,读法就是一个字母一个字母的读(官网的介绍视频就是这么读的).SLF4J是一个接口,规定了一些记录日志的 ...

  4. 使用Splunk监控SAP Dump

    最近在尝试使用Splunk对SAP系统进行监控,以Dump监控为例,总结了一点相关信息,记录在这里. 本文链接:https://www.cnblogs.com/hhelibeb/p/13260385. ...

  5. Aspose下载图片

    /// <summary> /// 把DataTable数据按照Excel模板导出到Excel /// </summary> /// <param name=" ...

  6. 【Linux】Linux常用命令及操作 (一)

    一.Linux简介 二.Linux基础命令 三.工作常用命令 --------------------------------------------------------------------- ...

  7. MYSQL 之 JDBC(四): 增删改查(二)通过ResultSet执行查询操作

    /** * ResultSet:结果集.封装了使用JDBC进行查询的结果. * 1. 调用Statement对象的executeQuery(sql)方法 * 2. ResultSet返回的实际上就是一 ...

  8. java 数据结构(三):java常用类 三 日期时间API

    JDK 8之前日期时间API 1.获取系统当前时间:System类中的currentTimeMillis()long time = System.currentTimeMillis();//返回当前时 ...

  9. Flutter 快捷开发 Mac Android Studio 篇

    老孟导读:此快捷方式适用于Mac下的 Android Studio .Windows 下的快捷方式请参考这篇文章:https://juejin.im/post/5efe71365188252e7d7f ...

  10. 不知道Linux内核到底长啥样?这幅漫画让你秒懂!

    下面给大家分享一个[超全2020Linux学习教程],点击链接免费领取哦~ https://www.magedu.com/?p=84301&preview=true