实现功能是向Web服务器发送Socket报文,监控服务器运行状况。导出Jar包放入JMeter中运行Java请求,具体实现如下:
1、打开Java编译器,新建一个项目TestJMeter,然后新建一个包test;
2、从JMeter的安装目录lib/ext中拷贝两个文件ApacheJMeter_core.jar和ApacheJMeter_java.jar到TestJMeter的项目中,然后引入这两个JAR文件.(具体的引入方法参考各个Java编译器的使用方法);
3、在test包中新建一个类,名字叫JMeterSocket,不过这个类要继承AbstractJavaSamplerClient类,如果项目引入步骤二中的两个文件,就可以找到AbstractJavaSamplerClient类了,并实现其4个方法;
4、具体实现代码如下:
package test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
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 JMeterSocket extends AbstractJavaSamplerClient{
private SampleResult results;
private String ip;
private String port;
private Socket client;
private OutputStream out;
private static final String FILENAME="D:/lt/22.txt";
public void setupTest(JavaSamplerContext arg0){
results=new SampleResult();
results.setSamplerData(toString());
results.setDataType("text");
results.setContentType("text/plain");
results.setDataEncoding("UTF-8");
results.setSuccessful(true);
results.setResponseMessageOK();
results.setResponseCodeOK();
ip=arg0.getParameter("ip","");
if(null!=ip && ip.length()>0){
results.setSamplerData(ip);
}
port=arg0.getParameter("port","");
if(null!=port && port.length()>0){
results.setSamplerData(port);
}
}
public void teardownTest(JavaSamplerContext arg0){
System.out.println("teardownTest");
}
public Arguments getDefaultParameters() {
Arguments params=new Arguments();
params.addArgument("ip", "192.168.1.215");
params.addArgument("port", "1002");
return params;
}
@Override
public SampleResult runTest(JavaSamplerContext Context) {
// TODO Auto-generated method stub
try {
ip=Context.getParameter("ip");
port=Context.getParameter("port");
client=new Socket(ip,Integer.parseInt(Context.getParameter("port")));
System.out.println("connect success!!!");
results.sampleStart();
readFile(FILENAME);
out.flush();
client.close();
results.sampleEnd();
} catch (UnknownHostException e) {
System.out.println("UnknownHostException="+e);
e.printStackTrace();
} catch (IOException e) {
System.out.println("IOException="+e);
e.printStackTrace();
}
return results;
}
public void readFile(String fileName) {
// TODO Auto-generated method stub
File file = new File(fileName);
try {
BufferedReader reader=new BufferedReader(new FileReader(file));
String tempString = null;
int line=1;
while((tempString = reader.readLine())!=null){
out=client.getOutputStream();
byte[] asd =hex2byte(tempString);
out.write(asd);
Thread.sleep(2000);
System.out.println("line:"+line+",content:"+tempString);
line++;
}
reader.close();
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static byte[] hex2byte(String hex) {
String digital = "0123456789ABCDEF";
String hex1 = hex.replace(" ", "");
char[] hex2char = hex1.toCharArray();
byte[] bytes = new byte[hex1.length() / 2];
byte temp;
for (int p = 0; p < bytes.length; p++) {
temp = (byte) (digital.indexOf(hex2char[2 * p]) * 16);
temp += digital.indexOf(hex2char[2 * p + 1]);
bytes[p] = (byte) (temp & 0xff);
}
return bytes;
}
}