使用JMETER对TCP/IP服务器进行压力测试

使用jmeter中的javasampler


package com.roiland.test;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.util.Map;

import javax.xml.bind.annotation.adapters.HexBinaryAdapter;

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;

public class TestDBConnection extends AbstractJavaSamplerClient {

private final static String TEST_LABEL = "TcpDB";

private final static short EXPECTED_HEAD = 0x8900 & 0xff;

private final static byte EXPECTED_HEART = 0x00;

BufferedOutputStream bos;
BufferedInputStream bis;

@Override
public SampleResult runTest(JavaSamplerContext arg0) {

String ip = arg0.getParameter("ip");
int port = arg0.getIntParameter("port");
SampleResult sr = new SampleResult();
sr.setSampleLabel(TEST_LABEL);
Socket socket = null;
try {

socket = new Socket(ip, port);
socket.setSoTimeout(2000);
bos = new BufferedOutputStream(socket.getOutputStream());
bis = new BufferedInputStream(socket.getInputStream());

byte[] data = { 9, 0, 1, 1, 4, 0, 29, 1, 1, 13, 8, 13, 9, 18, 24,
3, 0, 2, 0, -71, 103, 43, 0, 3, 0, 59, 69, -57, 0, 11, 0,
4, 56, 120, -48, 39 };
byte[] auth = { 9, 0, 1, 1, 1, 0, 30, 1, 65, 65, 49, 50, 51, 52,
53, 54, 55, 56, 57, 48, 49, 50, 51, 52, 53, 49, 49, 49, 49,
49, 49, 49, 49, -69, -100, -123, 117 };

ByteBuffer buf = ByteBuffer.allocate(auth.length);
ByteBuffer buf1 = ByteBuffer.allocate(data.length);
buf.put(auth);
buf1.put(data);
buf1.flip();
buf.flip();
int i = 0;

// byte[] reHead = new byte[2];
while (true) {

try {
if (i == 0) {
bos.write(buf.array());

bos.flush();
}
int length = bis.available();
if (length != 0) {

byte[] dataT = new byte[length];
if (length > 3) {
byte serial = dataT[3];
}
if (length == 4) {

} else {
bis.read(dataT);
short head = (short) (((dataT[1] & 0xFF) << 8) | (dataT[0] & 0xff));
if (head != EXPECTED_HEAD) {
break;
}
}
}
} catch (IOException e) {
sr.setSuccessful(false);
}

if (i == 2) {
try {
bos.write(buf1.array());
bos.flush();

sr.setSuccessful(true);
break;
} catch (IOException e) {
sr.setSuccessful(false);
}

break;
}
i++;

}
} catch (UnknownHostException e1) {

sr.setSuccessful(false);
} catch (IOException e1) {

sr.setSuccessful(false);
} finally {
try {

bos.close();
bis.close();
socket.close();
} catch (IOException e) {

sr.setSuccessful(false);
}
}

return sr;
}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值