public class TestYuan extends AbstractJavaSamplerClient {
private static String label = "CBCTest";
private String ip;
private String port;
private String INSTYPE;
private SampleResult sr;
public void setupTest(JavaSamplerContext arg0) {
System.out.println("setupTest");
}
public SampleResult runTest(JavaSamplerContext arg0) {
ip = arg0.getParameter("ip");
port = arg0.getParameter("port");
INSTYPE = arg0.getParameter("INSTYPE");
sr = new SampleResult();
sr.setSampleLabel(label);
try{
sr.sampleStart(); //记录程序执行时间,以及执行结果
//发送数据
String s=getInsData(INSTYPE);
System.out.println("send begin!");
sendMsg(ip,Integer.parseInt(port),s);
sr.setSuccessful(true);
System.out.println("send over!");
}catch(Throwable e){
sr.setSuccessful(false);
}finally{
sr.sampleEnd();
}
return sr;
}
private String getInsData(String instype2) throws Exception {
String retstr;
try {
retstr = redInput(instype2);
} catch (Exception e) {
System.out.println("instype:"+instype2+" file not exist!");
throw e;
}
return retstr;
}
public void teardownTest(JavaSamplerContext arg0) {
}
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("ip", "99.6.150.31");
params.addArgument("port", "8016");
params.addArgument("INSTYPE", "1");
return params;
}
private void sendMsg(String ip,int port,String data) throws Exception{
ClientSocket clientSocket = new ClientSocket(null, ip, port);
XmlIniPlus ini = null;
try {
ini = clientSocket.clientConnect("DCINSFRM","10041004",data/*, tmsListener*/);
} catch (Exception e) {
//支付设置为可疑 电子指令设置为失败 查支付设置为可疑
System.out.println("Exception:"+e.getMessage());
throw e;
}
System.out.println("success return!");
}
public static String redInput(String insType) throws Exception {
char data[] = new char[1024]; // 建立可容纳1024个字符的数组
FileReader fr = null;
try {
//fr = new FileReader("c:\\DCQRYBKP.xml");
fr = new FileReader("c:\\DCINSFRM_"+insType+".xml");
} catch (Exception e) {
e.printStackTrace();
throw e;
} // 建立对象fr
int num = 0;
String str = null;
try {
num = fr.read(data);
str = new String(data, 0, num); // 将字符列表转换成字符串
fr.close();
} catch (Exception e) {
e.printStackTrace();
throw e;
}
return str;
}
}
项目用mina做socket底层通信,需要做性能测试,loadrunner太难,还是jemeter小,功能全。自己实现了jemete的TCPsampler。
大致总结如下:
1.线程组:代表一定数量的并发用户,它可以用来模拟并发用户发送请求。实际的请求内容在Sampler中定义,它被线程组包含。可以在“测试计划->添加->线程组”来建立它,然后在线程组面板里有几个输入栏:线程数、Ramp-Up Period(in seconds)、循环次数,其中Ramp-Up Period(in seconds)表示在这时间内创建完所有的线程。如有8个线程,Ramp-Up = 200秒,那么线程的启动时间间隔为200/8=25秒,这样的好处是:一开始不会对服务器有太大的负载。线程组是为模拟并发负载而设计。
2、sampler
java请求:是自己写的一个sampler
3、聚合报告
Label:取样器名称
Samples:运行过程中一共发出了多少个请求,一般来说是其值=线程数*循环次数(前提:测试按计划跑完,其中没有异常结束的线程),如5个线程,每个线程循环10次,那么对应行的Samples数是:5*10=50,总体Samples是各请求Samples之和。
Average:平均响应时间
Median:响应时间中间值
90%Line:响应时间90%线
Min:最小响应时间
Max:最大响应时间
Error%:出错率(出错的Request数/所有的request数)
Throughput:吞吐量,每秒/每分钟(具体看“/”后面的单位)处理的Request数
KB/sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec
【注意】关于总体值并不是各列的累加。是以所有Samples为样本的统计值,如:总体Min=min{各个Samples的Min},总体Max=max{各个Samples的Max}