您的位置:首页 > 编程语言 > Java开发

Jmeter自定义编写Java代码调用socket通信

2013-09-13 15:02 459 查看

一、前言

最近需要测试一款手机游戏的性能,找不到啥录制脚本的工具,然后,另外想办法。性能测试实际上就是对服务器的承载能力的测试,和各种类型的手机客户端没有啥多大关系,手机再好,服务器负载不了,也不能够运行,依照这个思路,测试该手游的性能就化为对服务器的性能测试,也就是服务器和手机客户端所联系的接口的测试。

如果是可以用HTTP调用的,那样很好解决,直接带上地址参数就OK,开始一两个很顺利,设计参数化了一下数据就很顺利的解决,然后,遇到了一个切换场景的接口,用的是socket通信,再用上述方法貌似不可行,然后偶很懒,所以折腾了一天,结果,还是没有找到好的办法,无奈,想到了Jmeter可以调用java请求,只好到开发那边拿到协议,通过自定义编写java代码来实现socket通信,连接成功,返回数据成功。顺便说一句,Jmeter真是居家旅行必备~~~~

首先,Jmeter使用自定义编写代码的步骤:http://www.cnblogs.com/linglingyuese/articles/linglingyuese-two.html

二、代码

SocketClient.java类

package app;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;

public class SocketClient {

public boolean sendMessage(String ipAddress,int port,String data){
try {
Socket socket=new Socket(ipAddress,port);
DataInputStream  input=new DataInputStream(socket.getInputStream());
DataOutputStream output = new DataOutputStream(socket.getOutputStream());

byte[] message=data.getBytes("UTF-8");

//获得长度
int length=message.length;

message[0] = (byte) 0x00;
message[length-1] = (byte) 0xff;

output.write(message);
output.flush();
System.out.println(message);
Thread.sleep(1000);
if (!socket.isClosed() && socket.isConnected()) {
byte[] cbuf=new byte[8096];
input.read(cbuf);
System.out.println("读取到的是:"+cbuf);
String responseLine=new String(cbuf);
System.out.println(responseLine+"===========");
}
output.close();
input.close();

socket.close();

return true;
} catch (Exception e) {
return false;
}
}
}


TestScence.java类

package app;

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 TestScence extends AbstractJavaSamplerClient {

private SampleResult results;

private String ipAddress;

private String port;

private String data;

/**
* 初始化方法
*/
public void setupTest(JavaSamplerContext jsc) {
results = new SampleResult();

ipAddress = jsc.getParameter("ipAddress", "");
port = jsc.getParameter("port", "");
data = jsc.getParameter("data", "");

if (ipAddress != null && ipAddress.length() > 0){
results.setSamplerData(ipAddress);
}

if (port != null && port.length() > 0){
results.setSamplerData(port);
}

if (data != null && data.length() > 0){
results.setSamplerData(data);
}

}

/**
* 设置传入参数
*/
public Arguments getDefaultParameters() {
Arguments params = new Arguments();

params.addArgument("ipAddress", "");
params.addArgument("port", "");
params.addArgument("data", "");

return params;
}

/**
* 线程运行体
*/
public SampleResult runTest(JavaSamplerContext arg0) {
SocketClient sc = new SocketClient();

int port2 = 50001;

if (port != null && port.length() > 0){
port2 = Integer.parseInt(port);
}

results.sampleStart();

boolean flag = sc.sendMessage(ipAddress, port2, data);

results.sampleEnd();

if (flag){
results.setSuccessful(true);
}else{
results.setSuccessful(false);
}

return results;
}

/**
* 结束方法
*/
public void teardownTest(JavaSamplerContext arg0) {

}

}


三、导出为可以使Jmeter读取的jar包

在项目的根节点,右击选择【Export】,选择java下面的【JAR file】

然后一直点击下一步即可。

将导出的jar包放到如下目录:\apache-jmeter-2.9\lib\ext,然后重新启动Jmeter啊,新建java请求,就可以看到你刚刚写的java类啦,填写上相关的参数就可以啦。

测试不到一年,对性能啥的理解还不是太深,各位大神不要较真~~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: