美文网首页Apache JMeter
扩展JMeter TCP Socket支持定长的返回字节流

扩展JMeter TCP Socket支持定长的返回字节流

作者: XMeter性能测试云服务 | 来源:发表于2018-03-29 16:39 被阅读108次

本文版权归xmeter.net 所有。欢迎转载,转载请注明出处。

摘要

xmeter君写的JMeter测试TCP/IP Socket应用的性能介绍了如何利用JMeter提供的“TCP取样器”来测试基于TCP Socket的应用程序的性能,大部分情况下可以满足测试的需求,但是xmeter君也发现JMeter提供的“TCP取样器”不能满足测试需求,比如服务器端返回的内容并不是有一个明确的终止符(在“TCP取样器”中设定的“End of line(EOL) byte value”),但是可能返回的是一个定长的字节流等。那本文就介绍一下如何对“TCP取样器”做一个扩展,来支持定长的返回字节流。

前提

在进入实际工作之前,读者最好能了解一下以下的知识,并且做好相应的准备工作。

1. 创建JMeter的开发环境。我们这次做的是基于“TCP取样器”的扩展,需要对其进行代码修改,因此首先需要准备好JMeter的开发环境。读者可以参考xmeter君之前写的JMeter Eclipse开发环境安装、配置过程来配置一个开发环境

2. 了解JMeter第三方协议插件扩展的方法。JMeter提供了插件的扩展机制来支持不同的协议测试,TCP Socket作为JMeter内置支持的协议,也是按照插件扩展的规范来实现的,读者可以参考xmeter君写的这篇文章来了解JMeter插件的开发方法,从而更好的理解本文的内容。

3. 最后需要对“TCP取样器”插件本身需要有所了解,当然,如果读者有扩展“TCP取样器”的需求的话,应该已经对本插件已经比较熟悉了。

效果

先来看一下修改后的效果,在“End of line(EOL) byte value: ”之后增加了一个“响应长度”的字段。如果“End of line(EOL) byte value: ”和“响应长度”同时设置了的话,现在的代码实现会优先考虑使用“End of line(EOL) byte value: ”的配置,“响应长度”里的设置会被忽略。下图所示的例子是xmeter君之前在文章写的TextServer中返回: "Echo: " + 客户端发送的数据。如下图所示,客户端发送的是"hello",那么服务器返回的是"Echo: hello\n",其中"\n"是回车符,所以总共长度为12位。当然,如果碰到了服务器端的字节流结束符的话,不到指定的响应长度也会直接返回。如果指定的长度小于实际的字符流的长度,那么超过指定长度的字符就会被截掉。

开发过程

JMeter对TCP协议的支持都放在了tcp目录下,因此本次开发的所做的更改都集中于该目录,如下图所示,或者参考此链接

改造过程跟一般的协议扩展非常相似,读者可以参考xmeter君写的这篇文章。本次更改主要为,

1) TCPConfigGui.java中加入了UI,增加了新的字段

2)TCPSampler.java加入了对“响应长度”字段向TCPClient.java以及相关的扩展类的设置

3)TCPClient.java以及相关的扩展类,增加了对返回的内容中“响应长度”的处理

具体的代码不在此做详细介绍,读者可以参考这个源码库,如果读者想直接使用,可以在此下载编译好的JAR包(基于JMeter 4.1版本),并覆盖你本地的$JMETER_HOME/lib/ext/ApacheJMeter_tcp.jar即可。读者在使用过程中有任何问题,可以在项目中直接提bug。读者请注意:本文只作为一个参考,如果在实际的生产测试中使用此修改后的插件请仔细评估!

读者如果要基于xmeter君的版本进行修改,只需要在创建好JMeter的集成开发环境之后,从本代码库下载源代码,然后覆盖你工作区里的源代码就可以了,然后基于xmeter君的版本进行修改、编译。

相关文章

  • 扩展JMeter TCP Socket支持定长的返回字节流

    本文版权归xmeter.net所有。欢迎转载,转载请注明出处。 摘要 xmeter君写的JMeter测试TCP/I...

  • netty源码分析(七) - 解码 - 2常用解码器

    FixedLengthFrameDecoder:固定长度解码器 固定长度3字节为例 原始TCP数据报中字节流 解码...

  • CocoaAsyncSocket --Socket学习

    Socket理论 套接字(Socket)概念 套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信...

  • iOS 网络(三)-Socket

    一、Socket原理 1.套接字(Socket)概念 套接字(Socket)是通信的基石,是支持TCP/IP协议的...

  • Socket原理

    原文:iOS面试题大全 1、套接字(socket)概念 套接字(socket)是通信的基石,是支持TCP/IP协议...

  • 如何在 JMeter 中使用 MQTT 插件

    JMeter 内置 HTTP/HTTPS、TCP 等支持多种协议,还具备插件扩展机制。 MQTT 协议作为物联网界...

  • 22.网络socket

    Socket / TCP / HTTP 联系与区别 Socket / TCP socket)是通信的基石,是支持T...

  • iOS网络编程之Socket

    1、套接字(socket)概念 套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元...

  • IPC之基于TCP协议的Socket的使用

    Socket也称为套接字,可以用来实现进程间的通信。Socket本身支持传输任意字节流。 demo实现了简单的跨进...

  • socket原理

    socket理解 -套接字socket是通信的基石,是介于传输层(tcp/udp)和应用层(http等)之间,支持...

网友评论

    本文标题:扩展JMeter TCP Socket支持定长的返回字节流

    本文链接:https://www.haomeiwen.com/subject/fhizfftx.html