针对某些特殊场景,jemter提供的功能不能满足于需求,这个时候就需要自己编写自定义的java任务进行压测
一. 自定义java任务
1.1 重apache-jmeter\lib\ext 目下copy ApacheJMeter_core.jar和ApacheJMeter_java.jar到工程目录下
1.2 继承 AbstractJavaSamplerClient类并重写runTest,getDefaultParameters,setupTest方法
package test;
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;
import java.util.HashMap;
import java.util.Map;
/**
* @Date 2019/3/19 10:48
* @Created by LeeJunMing
*/
public class TestSocket extends AbstractJavaSamplerClient {
private static final String HOST_NAME = "HOST";//设置GUI页面显示的变量名称
private static final String PORT_NAME = "PORT";//设置GUI页面显示的变量名称
private static final String FILEPATH_NAME = "FILEPATH";//设置GUI页面显示的变量名称
String host;
int port;
String filePath;
@Override
public SampleResult runTest(JavaSamplerContext sc) {
SampleResult sr = new SampleResult();
sr.setSampleLabel("Socket Test");
try {
//压测业务逻辑代码
System.out.println("test")
//模拟异常
//System.out.println(1/0);
sr.setSuccessful(true);
sr.setResponseData("上传成功!", null);//将数据打印到查看结果树当中
} catch (Exception e) {
e.printStackTrace();
sr.setSuccessful(false);
sr.setResponseData("上传失败!" + e.getMessage(), null);//将数据打印到查看结果树当中
} finally {
sr.sampleEnd();
}
sr.setDataType(SampleResult.TEXT);
return sr;
}
@Override
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument(HOST_NAME, "127.0.0.1");
params.addArgument(PORT_NAME, "15997");
params.addArgument(FILEPATH_NAME, "D:\\test.mp4");
return params;
}
@Override
public void setupTest(JavaSamplerContext context) {
host = context.getParameter(HOST_NAME);
port = Integer.parseInt(context.getParameter(PORT_NAME));
filePath = context.getParameter(FILEPATH_NAME);
super.setupTest(context);
}
}
1.3 把应用打包成jar包,并放到apache-jmeter\lib\ext下面
二 使用工具执行自定义任务测试
2.1 添加一个java任务
三 查看请求结果
socket上传都成功了