packagecom.test;importorg.apache.jmeter.config.Arguments;importorg.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;importorg.apache.jmeter.protocol.java.sampler.JavaSamplerContext;importorg.apache.jmeter.samplers.SampleResult;importjava.io.IOException;importjava.net.DatagramPacket;importjava.net.DatagramSocket;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;//很多问题在于少加载了依赖包,可以把jmeterhome/lib下所有jar加载到External Libraries
public class JavaTest_getL_udp extendsAbstractJavaSamplerClient {private static final Logger logger = LoggerFactory.getLogger(JavaTest_getL_udp.class);privateString port;//private String seconds;//这个方法是用来自定义java方法入参的//* params.addArgument("port","");表示入参名字叫port,默认值为空。
@OverridepublicArguments getDefaultParameters() {
Arguments params= newArguments();
params.addArgument("port", "");//params.addArgument("seconds", "");
returnparams;
}//每个线程测试前执行一次,做一些初始化工作//获取输入的参数,赋值给变量,参数也可以在下面的runTest方法中获取,这里是为了展示该方法的作用
@Overridepublic voidsetupTest(JavaSamplerContext arg0) {
port= arg0.getParameter("port");//seconds = arg0.getParameter("seconds");
}//真正执行逻辑的方法
@OverridepublicSampleResult runTest(JavaSamplerContext arg0) {
SampleResult sr= newSampleResult();//sr.setSamplerData("端口号port:"+port+"\n循环运行时间seconds:"+seconds);//logger.info("端口号port:" + port +" 循环运行时间seconds:"+seconds);
sr.setSamplerData("端口号port:"+port);
logger.info("IP是:127.0.0.1 "+"端口号port:" +port);try{//jmeter 开始统计响应时间标记
sr.sampleStart();//创建接收端的Socket服务对象,并且指定端口号
DatagramSocket ds = newDatagramSocket(Integer.parseInt(port));//long start = System.currentTimeMillis();//long end = start + (Integer.parseInt(seconds))*1000;//seconds * 1000 ms/sec//for (int i = 0;i<100000000;){//创建一个数据包,用于接收数据
byte[] bys = new byte[1024];
DatagramPacket dp= newDatagramPacket(bys, bys.length);//接收数据
ds.receive(dp);//获取ip地址,解析数据
String ip=dp.getAddress().getHostAddress();//String ip = "192.168.10.222";//获取数据
String data = new String(dp.getData(),0,dp.getLength());
logger.info("from " + ip + " data is " +data);//通过下面的操作就可以将被测方法的响应输出到Jmeter的察看结果树中的响应数据里面了。
sr.setResponseData("接收到udp :"+ data, "utf-8");
sr.setDataType(SampleResult.TEXT);//设置响应执行成功
sr.setSuccessful(true);//i++;//if(System.currentTimeMillis() >= end) break;//}
}catch(Throwable e) {//有异常,执行失败
sr.setSuccessful(false);
e.printStackTrace();
}finally{//jmeter 结束统计响应时间标记
sr.sampleEnd();
}returnsr;
}
@Overridepublic voidteardownTest(JavaSamplerContext arg0) { }//main方法测试程序是否可用,打包时 注释掉
public static voidmain(String[] args) {
Arguments params= newArguments();//设置参数,并赋予默认值1
params.addArgument("port", "10000");//params.addArgument("seconds", "1");
JavaSamplerContext arg0 = newJavaSamplerContext(params);
JavaTest_getL_udp test= newJavaTest_getL_udp();
test.setupTest(arg0);
test.runTest(arg0);
test.teardownTest(arg0);
}
}