Jmeter TCP协议性能测试

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

 

 

 首先呢,我这边用的是16进制的报文:apache

(1)TCPClient classname:org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImplwindows

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)超时:eclipse

  单位毫秒,0 表示禁用超时tcp

(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链接。下面一步一步讲如何实现咱们的需求

  一、首先咱们到Jmeter官网下载源码版本 https://archive.apache.org/dist/jmeter/source/ 下载source版本的zip格式,博主这边是Jmeter5.1.1,解压到本地目录

  二、修改目录,这一步必定要作,否则没法导入,

    进入解压后的目录,会看到两个文件:eclipse.classpath和eclipse.projecte,分别修改成 .classpath 和 .projecte

    在 windows 下不能直接修改,要使用 cmd 命令行;  

打开 cmd 命令行窗口,进入解压的源码目录下,执行以下命令:
ren .eclipse.classpath .classpath
ren .eclipse.project .project

  三、导入IDEA

    点击File -> New -> Project from Existing Sources,选择Jmeter源码目录

    选择按 eclipse 项目导入,以下所示:

    

 

 

     其余所有默认,一直Next便可

  四、ANT, 若是电脑没有ANT,能够去下载一个,而后配置下环境变量便可

    在窗口右侧 Ant Build 中,点击 + ,选择源码目录下的 build.xml,会把全部相关信息展现在右侧列表中,

    

 

 

     双击列表中的 download_jars ,会自动下载全部缺失 jar 包,到 jmeter 源码目录的 lib 目录下

  五、更新项目依赖的jar包

    在首次导入项目时,会自动在 dependency 下添加依赖 jar 包,但都是缺失状态,当咱们用 Ant 下载好 jar 包后,IDEA 并不会自动更新,必需要手动更新。

    在项目上右键打开 Open Module Settings,在项目 src 下点击 protocol 文件夹,再点击上方 Sources 按钮,点击 Apply。

    点击 Dependencies,删除全部报错的 jar 包;

    从新添加新下载的 jar 包:右侧 + ,选择 JARs or directories,依次选择源码目录下的 lib 目录和 lib 下的几个目录,最后 Apply :

    

 

  六、ANT install  

    从新添加 jar 包后,必须执行 Ant install。

  七、设置运行的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 界面了!!

   八、此时咱们搜索TCPSample ,ctrl+n :

    

 

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

    

 

     修改红色框内容,至于为何要设置为null,能够点进方法中本身看,在这就不过多说了。

  九、最后执行build:

    

 

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

    

 

     并复制出来

  十、进入Jmeter\lib\ext的目录下,找到ApacheJMeter_tcp.jar 这个jar包,以压缩包形式打开,并找到TCPSampler.class文件,将咱们修改过的class文件拖入并替换,这样大功告成,不会由于EOL没有匹配到链接就会断开,也不会置为500状态。

 

好了今天就先讲这么多,之后有时间再给你们分享

相关文章
相关标签/搜索