最近有在做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\Scoket(8583)报文压力测试

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

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

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

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

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

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

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

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

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

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

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

  8. Jmeter Http接口性能测试

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

  9. loadrunner测试TCP协议服务器性能

    loadrunner测试TCP协议服务器性能 . 性能loadrunner测试c 最近对服务器的性能感兴趣,于是开始研究了一阵子loadrunner如何做采用TCP协议交互的服务器的性能测试,对loa ...

  10. 自行控制loadrunner的socket协议性能测试 (转)

    一前言 二任务的提出 三实现方案讨论 四技术要点讲解 如何开始录制一个最简单的收发数据包脚本 写日志文件 一行一行读数据包文件 字符串转换为十六进制数据包 发送自己定义的数据包 接收数据包到自定义缓冲 ...

随机推荐

  1. MVC小系列(二十一)【带扩展名的路由可能失效】

    mvc3之后:如果路由带上扩展名,比如这样: public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRout ...

  2. perl 面向对象demo

    Vsftp:/root/perl/17# cat Critter.pm package Critter; sub new { my $self = {}; my $invocant = shift; ...

  3. 《JavaScript 闯关记》之数组

    数组是值的有序集合.每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引. JavaScript 数组是无类型的,数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的类型 ...

  4. sql server在一个字段相同值时,另一个字段结果拼接

    如下字段红框里的信息都一样的,通过转换实现字段拼接 SELECT formmain_id,(SELECT field0040+';' FROM formson_5489 WHERE formmain_ ...

  5. 利用YOLOV3训练自己的数据

    写在前面:YOLOV3只有修改了源码才需要重新make,而且make之前要先make clean. 一.准备数据 在/darknet/VOCdevkit1下建立文件夹VOC2007. voc2007文 ...

  6. ZeroTier One

    ZeroTier – 无配置,零基础「内网穿透」随时随地连回家/学校/办公室 [跨平台] https://www.appinn.com/zerotier-one/ Virtual NetworkZer ...

  7. 2017年值得学习的3个CSS特性

    原文:https://bitsofco.de/3-new-css-features-to-learn-in-2017/译文:http://caibaojian.com/3-new-css-featur ...

  8. Hive SQL执行流程分析

    转自 http://www.tuicool.com/articles/qyUzQj 最近在研究Impala,还是先回顾下Hive的SQL执行流程吧. Hive有三种用户接口: cli (Command ...

  9. 收集的可以下载css3字体图标的网站

    http://icomoon.io/app/ 可以选择跟简单调整图标打包成css3 字体下载, http://www.flaticon.com/categories/weapons

  10. 基于 Docker 搭建 MySQL 主从复制

    本篇博文相对简单,因为是初次使用Docker,MySQL的主从复制之前也在Centos环境下搭建过,但是也忘的也差不多了,因此本次尝试在Docker中搭建. 根据网上教程走还是踩了一些坑,不过所幸最终 ...