浅谈配置元件之TCP取样器配置/TCP取样器

浅谈配置元件之TCP取样器配置/TCP取样器

1.引言

在进行网络性能测试时,TCP取样器配置和TCP 取样器(TCP Sampler)是两个重要的组件,他们允许用户直接发送和接收TCP 数据包,这对于测试服务器的TCP 连接处理能力、模拟特定的TCP 交互场景非常有用。本文档将详细介绍如何在JMeter中配置和使用TCP 取样器配置和TCP取样器使用,因为两者基本一样,所以两个放在一起讲解。

2.添加TCP 取样器配置/TCP 取样器

添加TCP取样器配置

  1. 新建线程组:首先,在测试计划中右击,选择“添加” > “Threads(Users)” > “线程组(Thread Group)”,添加一个线程组
  2. 添加TCP 取样器配置:在刚刚创建的线程组内,右击选择“添加” > “配置元件” > “TCP 取样器配置(TCP Sampler Config)”。
    添加TCP取样器
  3. 新建线程组:首先,在测试计划中右击,选择“添加” > “Threads(Users)” > “线程组(Thread Group)”,添加一个线程组
  4. 添加TCP 取样器:在刚刚创建的线程组内,右击选择“添加” > “取样器(Sampler)” > “TCP 取样器(TCP Sampler)”。

3.配置TCP 取样器

TCP 取样器的配置界面提供了多个参数,以满足不同的测试需求:
● TCPCllient classname:
TCP Sampler提供了3个报文编码类型的实现,分别是
1.org.apache.jmeter.protocol.tcp.sampler. TCPClientImp
2.org.apache.jmeter.protocol.tcp.sampler. BinaryTCPClientImpl
3.org.apache.jmeter.protocol.tcp.sampler. LengthPrefixedBinaryTCPClientImpl
1)TCPClientImpl以文本编辑器中所编辑的纯文本为内容进行发送。
2)BinaryTCPClientImpl以文本编辑器中所编辑的16进制字符(hex)内容为基础转换为二进制的
字节内容进行发送。
3)LengthPrefixedBinaryTCPClientImpl在BinaryTCPClientImpl基础上默认以发送内容的长度为
字节前缀进行填充。
案例说明的时候会根据不同的情况进行举例说明。
● 服务器名称或IP:输入目标服务器的域名或IP地址。
● 端口号:指定服务器上监听的TCP端口。
● 超时连接:与服务器套接字应用连接超时时间(毫秒)
● 超时时间:响应超时时间(毫秒),这个值的设置跟End of line(EOL) byte value有关系,如果End of line(EOL) byte value中的值设置不正确,会导致JMeter一直在等待无法结束,但是如果指定了Response Timeout这个值的话,在到达这个值的时候就关闭连接
● 重用连接(Re-use connection):勾选后,将在同一个线程内重用TCP连接,对于需要多次交互的测试场景非常有用。
● 关闭连接:测试结束后是否关闭连接。
● 设置无延迟:是否需要使用该选项,需要跟实际的业务情况结合
● SO_LINGER:该配置项用于控制在关闭连接之前是否要等待缓冲区中的数据发送完成。如果SO_LINGER选项指定了值,则在得到关闭连接的请求之后还会等待指定的秒数以完成缓冲区中数据的发送,在指定的SO_LINGER秒数完成后,关闭连接。因此,如果你把该选项设置成0,那么所有连接在收到关闭连接的时候都会立即关闭,避免产生很多处于TIME_WAIT状态的套接字。
● End of line(EOL) byte value:响应数据的最后2位,转换为10进制的值。取值区间[-128,127]。
● 要发送的文本:在此处输入要发送到服务器的数据。根据协议和需求,这可以是任何文本或二进制数据。

4.案例说明

情况1:TCPClientImp模式

  1. 后端测试代码如下
package com.test;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class tcp {public static void main(String[] args) throws Exception {// 监听的端口号int portNumber = 9002;// 创建 ServerSocket 对象ServerSocket serverSocket = new ServerSocket(portNumber);System.out.println("等待客户端连接...");while (true) {// 接受客户端的连接请求Socket client = serverSocket.accept();System.out.println("客户端已连接,IP地址:" + client.getInetAddress().getHostAddress());// 创建用于读取客户端发送的数据的输入流BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));System.out.println(in.readLine());// 创建用于向客户端发送数据的输出流PrintWriter out = new PrintWriter(client.getOutputStream(), true);out.println("hello Client");out.flush(); // 刷新缓冲区,保证数据已被发送// 关闭连接in.close();out.close();client.close();}}
}

TCPCllient classname选择TCPClientImp,jmeter.properties中设置为tcp.handler=TCPClientImpl,服务器名称或IP设置127.0.0.1,端口号设置9002,要发送的文本设置为{“a”: “b”,“c”: “d”},其他默认
运行脚本,查看结果树,在响应数据的Response Body中可以看到信息:hello Client

情况2:BinaryTCPClientImpl模式

  1. 后端测试代码如下
package com.test;import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class tcp {public static void main(String[] args) throws Exception {// 监听的端口号int portNumber = 9002;// 创建 ServerSocket 对象ServerSocket serverSocket = new ServerSocket(portNumber);System.out.println("等待客户端连接...");while (true) {// 接受客户端的连接请求Socket client = serverSocket.accept();System.out.println("客户端已连接,IP地址:" + client.getInetAddress().getHostAddress());// 创建用于读取客户端发送的数据的输入流InputStream inputStream = client.getInputStream();// 读取数据byte[] buffer = new byte[1024];int bytesRead;StringBuilder data = new StringBuilder();while ((bytesRead = inputStream.read(buffer)) != -1) {// 将读取到的数据转换为字符串并添加到data中data.append(new String(buffer, 0, bytesRead));break;}System.out.println("接收到的数据:\n" + data.toString());PrintWriter out = new PrintWriter(client.getOutputStream(), true);out.println("OK");out.flush(); // 刷新缓冲区,保证数据已被发送// 关闭连接out.close();client.close();}}
}

TCPCllient classname选择BinaryTCPClientImpl,jmeter.properties中设置为tcp.handler=BinaryTCPClientImpl,服务器名称或IP设置127.0.0.1,端口号设置9002,要发送的文本设置为697427732074696d6520746f20706c61792e,使用在线工具(https://www.sojson.com/hexconvert/16to10.html)可以获取范围该内容为:it’s time to play.行尾(EOL)字节值使用10,其他默认运行脚本,查看结果树,在响应数据的Response Body中可以看到信息:4f4b0d0a,该数据进行翻译以后即为测试代码中OK的字符。

情况3:LengthPrefixedBinaryTCPClientImpl模式

根据情况2,发现发送内容无区别,但是在响应数据中可以看到不一样。

情况4:Re-use connection模式

后端测试代码如下

package com.test;import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class tcp {public static void main(String[] args) throws Exception {// 监听的端口号int portNumber = 9002;// 创建 ServerSocket 对象ServerSocket serverSocket = new ServerSocket(portNumber);System.out.println("等待客户端连接...");while (true) {// 接受客户端的连接请求Socket client = serverSocket.accept();System.out.println("客户端已连接,IP地址:" + client.getInetAddress().getHostAddress());int remotePort = client.getPort();// 创建用于读取客户端发送的数据的输入流System.out.println("remotePort:" + remotePort);InputStream inputStream = client.getInputStream();// 读取数据byte[] buffer = new byte[1024];int bytesRead;StringBuilder data = new StringBuilder();while ((bytesRead = inputStream.read(buffer)) != -1) {// 将读取到的数据转换为字符串并添加到data中data.append(new String(buffer, 0, bytesRead));break;}System.out.println("接收到的数据:\n" + data.toString());PrintWriter out = new PrintWriter(client.getOutputStream(), true);out.println("OK");out.flush(); // 刷新缓冲区,保证数据已被发送// 关闭连接out.close();client.close();}}
}

主要就是将关闭连接的代码取消,并且将线程组中的循环次数设置为2

未勾选Re-use connection,未勾选关闭连接
  1. 当我们未勾选的时候,进行TCP测试,可以看到java后台打印的信息如下
等待客户端连接...
客户端已连接,IP地址:10.33.123.18
remotePort:1066
接收到的数据:
it's time to play.
客户端已连接,IP地址:10.33.123.18
remotePort:1067
接收到的数据:
it's time to play.
勾选Re-use connection,未勾选关闭连接
  1. 当我们未勾选的时候,进行TCP测试,可以看到java后台打印的信息如下
客户端已连接,IP地址:10.33.123.18
remotePort:27770
接收到的数据:
it's time to play.
勾选Re-use connection,勾选关闭连接
  1. 当我们勾选的时候,在未测试TCP时,我们首先看下当前在只启动后台的情况下,TCP的监听情况
客户端已连接,IP地址:10.33.123.18
remotePort:13723
接收到的数据:
it's time to play.
客户端已连接,IP地址:10.33.123.18
remotePort:13724
接收到的数据:
it's time to play.
情况5:超时(毫秒):连接

超时(毫秒)中将连接设置为1,即1毫秒内需要建立连接,否则超时,其他参数不变,进行TCP测试,可以在查看结果树中看到如下结果:

Error Count: 1
Data type ("text"|"bin"|""): 
Response code: 500
Response message: java.net.SocketTimeoutException
情况6:超时(毫秒):响应

超时(毫秒)中将响应设置为1,即1毫秒内需要建立连接,否则超时,其他参数不变,进行TCP测试,可以在查看JMeter日志中看到如下结果:

Caused by: java.net.SocketTimeoutException: Read timed outat java.net.SocketInputStream.socketRead0(Native Method) ~[?:1.8.0_101]at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) ~[?:1.8.0_101]at java.net.SocketInputStream.read(SocketInputStream.java:170) ~[?:1.8.0_101]at java.net.SocketInputStream.read(SocketInputStream.java:141) ~[?:1.8.0_101]at java.net.SocketInputStream.read(SocketInputStream.java:127) ~[?:1.8.0_101]at org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl.read(BinaryTCPClientImpl.java:134) ~[ApacheJMeter_tcp.jar:5.1.1 r1855137]... 6 more

5.总结

通过上述步骤,你可以有效地配置和利用JMeter的TCP 取样器来进行TCP层面的性能和功能测试。无论是简单的连接测试,还是复杂的交互协议模拟,TCP 取样器都提供了强大的支持。记得在实际测试前,充分理解你的测试目标,并根据需要调整取样器的配置选项,以确保测试的有效性和准确性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/30962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Arduino-ESP32的CAN波特率设置为1M代码,不用改底层。

前面调CAN的时候,发现CAN的实际的波特率是设置的波特率的一半。然后还去看手册,推公式,改底层库的代码。后面发现不用这么麻烦,换一下使用的库和配置函数就行。使用CAN.h头文件的配置函数就会出现CAN的实际的波特率是设置的波特率…

使用opencv合并两个图像

本节的目的 linear blending(线性混合)使用**addWeighted()**来添加两个图像 原理 (其实我也没太懂,留个坑,感觉本科的时候线代没学好。不对,我本科就没学线代。) 源码分析 源码链接 #include "opencv2/imgc…

函数柯里化:简化 JavaScript 函数调用的神奇技巧

函数柯里化 在 JavaScript 中,函数柯里化(Currying)是一种强大的技术,可以帮助我们简化函数的调用方式,增强代码的灵活性和可复用性。本文介绍函数柯里化的基本概念、实现方法以及几个实用的应用场景,适合…

西米支付:【风控升级】同一商户集中交易,将会限制正常用卡

支付公司风控策略再升级!近日,有某支付公司代理透漏,客户反馈机器突然不能刷卡了,换卡也无法交易,交易均提示06-超出商户限额,然而该款机器刷卡限额为单日30万,单月300万,客户并未触…

Win11 设置本地管理员账户的几种方法总结

从设置界面创建 Win11 设置本地管理员账户我们可以在设置界面来进行设置,下面是具体的操作步骤: 首先我们需要打开设置界面,然后点击“账户”选项,进入之后点击“其他用户”。 然后在用户界面中我们找到“其他用户”模块下的添加…

AMD vs NVIDIA:渲染领域的显卡之争

在数字创意与设计的世界里,显卡作为图形处理的核心,其性能与兼容性直接关系到创作者的工作效率与作品质量。AMD与NVIDIA,作为两大显卡巨头,各自在渲染领域拥有独特的技术与优势。那么,针对渲染而言,哪种显卡…

四川古力未来科技有限公司抖音小店解锁电商新机遇

在数字化浪潮席卷全球的今天,电商行业正以前所未有的速度蓬勃发展。四川古力未来科技有限公司紧跟时代步伐,积极拥抱变革,在抖音平台上开设小店,为品牌发展注入了新的活力。那么,四川古力未来科技有限公司抖音小店究竟…

C#和python端通信之使用共享内存

一、前言 本篇主要实验通过使用共享内存实现C#端代码和python端代码之间的通信,主要目的是相较于直接传输较大的数据(例如图像数据),该方式更节省时间。 二、代码 C#端: 创建了一个大小为1的共享内存,名为…

Js-w3school(2024(1)

10.访问 HTML 元素 使用“不整洁的” HTML 样式的后果,也许是导致 JavaScript 错误。请在 HTML 中使用相同的命名约定(就像 JavaScript 那样) 11. 请使用正确的文档类型 请始终在文档的首行声明文档类型: 如果您一贯坚持小写标…

web前端程序发布:揭秘从开发到上线的四大关键、五大步骤、六大技巧与七大注意事项

web前端程序发布:揭秘从开发到上线的四大关键、五大步骤、六大技巧与七大注意事项 在数字化时代,Web前端程序是连接用户与服务器之间的重要桥梁。发布一个稳定、高效的Web前端程序,不仅考验着开发者的技术水平,更关系到用户体验和…

学懂C#编程:常用高级技术——委托(Delegate)应用场景——事件处理

事件处理: 委托是C#事件模型的核心。一个事件本质上是一个委托类型的字段,用于存储一系列方法的引用,当特定事件发生时,这些方法会被调用。 我们通过下面这个例子来讲解C#中事件(Event)的基本用法&#xff…

神经网络学习-池化层

池化层方法 池化一般是用来对卷积层进行降维 空洞卷积,通过在卷积核的元素之间插入“空洞”(即零),可以在不增加参数量和计算量的情况下扩大卷积核的感受野。这对于捕捉图像中的多尺度信息特别有用。 池化的默认步长是池化核的大…

drogon跨域问题和全局异常处理

2024年6月20日12:21:11 在main.cc里加入 /*** 全局异常处理*/drogon::app().setExceptionHandler([](const std::exception &e,const drogon::HttpRequestPtr &req,std::function<void(drogon::HttpResponsePtr &)> &&callback){LOG_DEBUG <<…

vscode插件开发之 - 消息通信

在开发vscode插件过程中&#xff0c;有一个典型场景是webview与extension.ts进行通信&#xff0c;例如&#xff0c;webview上的某些信息发送改变时&#xff0c;需要发送消息传递给extension.ts. 如果使用react框架构建vscode插件的webview&#xff0c;如何实现webview与extensi…

Python爬虫工程师的技术栈

第一部分&#xff1a;Python爬虫工程师的技术栈 引言 Python爬虫工程师负责设计和实现自动化数据采集系统&#xff0c;从互联网上抓取所需的数据。在本文的第一部分&#xff0c;我们将详细介绍Python爬虫工程师的技术栈&#xff0c;包括爬虫框架、数据存储、并发处理、异常处…

工厂ESOP系统促进工厂快速响应和工艺改进

在当今追求可持续发展和创新的时代&#xff0c;新能源产业正以惊人的速度崛起。新能源工厂作为这一领域的核心生产环节&#xff0c;面临着不断提高效率、优化工艺和快速应用新技术的巨大挑战。为了应对这些挑战&#xff0c;越来越多的新能源工厂开始引入 ESOP 系统&#xff08;…

为什么企业需要数据挖掘平台?哪个比较好呢?

什么是数据挖掘&#xff1f; 数据挖掘就是从大量的数据中去发现有用的信息&#xff0c;然后根据这些信息来辅助决策。听起来是不是跟传统的数据分析很像呢&#xff1f;实际上&#xff0c;数据挖掘就是智能化的数据分析&#xff0c;它们的目标都是一样的。但是&#xff0c…

通用大模型

方向一&#xff1a;背景介绍 通用大模型&#xff08;如 GPT-3.5 和 GPT-4&#xff09;和垂直大模型各有优点和适用场景&#xff0c;选择更青睐哪一方主要取决于具体需求和应用场景。以下是两者的对比&#xff1a; 通用大模型 优点: 广泛适用性: 通用大模型可以用于多种任务&…

【SPIE独立出版 | 往届均已完成EI检索】2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024)

2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024) 2024 International conference on Cloud Computing, Performance Computing and Deep Learning *CCPCDL往届均已完成EI检索&#xff0c;最快会后4个半月完成&#xff01; 一、重要信息 大会官网&#xff1a;www…

盘点海外大带宽服务器:哪家值得选?

针对外贸业务遭遇大流量访问时的巨大带宽需求&#xff0c;我们可能有很多人会选择寻找一些海外大带宽服务器提供商来提升网站的访问效率。所以&#xff0c;本文整理了五个海外大带宽服务器的产品商家&#xff0c;如果有需要可以选择参考。 亚马逊 AWS(Amazon Web Services) 亚马…