Apache JMeter TCPSampler的使用及自定义

本文详细介绍了Apache JMeter的TCP Sampler使用,包括Mock TCP Server的构建,TCP Sampler的典型和非典型配置,如TCPClientImpl、BinaryTCPClientImpl和LengthPrefixedBinaryTCPClientImpl的差异,EOL配置以及如何自定义TCPClient。通过实例展示了TCP Sampler的工作原理和配置技巧。
摘要由CSDN通过智能技术生成

JMeter提供纯TCP协议级别Sampler,如果你不觉得麻烦可以通过它来完成所有基于TCP协议的性能测试,这样一个万金油式的Sampler由于很少进入使用者的视野,因此,在实际使用中存在着许多隐藏特性和误解,本篇将对TCP Sampler使用中的一些特点进行讲解。

Mock TCP Server

为了更好的理解TCP Sampler的使用,我们将构建一个Mock TCP Server用于测试,并根据不同的TCP Sampler类型和设置进行调整,以达到直观易懂的目的,一个典型的TCP Server代码参考如下:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class TCPServer {
   
	private int port = 10009;
	private ServerSocket serverSocket;
	private ExecutorService executorService;
	private final int POOL_SIZE = 20;

	public TCPServer() throws IOException {
   
		serverSocket = new ServerSocket(port);
		executorService = Executors.newFixedThreadPool(Runtime.getRuntime()
				.availableProcessors() * POOL_SIZE);
	}

	public void service() {
   
		while (true) {
   
			Socket socket = null;
			try {
   

				socket = serverSocket.accept();
				executorService.execute(new Handler(socket));

			} catch (Exception e) {
   
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args) throws IOException {
   
		new TCPServer().service();
	}

}

class Handler implements Runnable {
   
	private Socket socket = null;

	public Handler(Socket socket) {
   
		this.socket = socket;
	}

	private BufferedReader getReader(Socket socket) throws IOException {
   
		InputStream in = socket.getInputStream();
		return new BufferedReader(new InputStreamReader(in));
	}

	public void run() {
   
		BufferedReader br = null;
		PrintWriter out = null;

		System.out.println("New connection accepted " + socket.getInetAddress()
				+ ":" + socket.getPort());

		try {
   
			br = getReader(socket);

			String recv = null;
			recv = br.readLine();

			System.out.println(recv);

			out = new PrintWriter(socket.getOutputStream());
			out.write("Hello Client\r\n");
			out.flush();

		} catch (IOException e) {
   
			e.printStackTrace();
		} finally {
   
			try {
   
				if (br 
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值