Jmeter可用来调java请求,也可发起压力测试,虽然没有Loadrunner生成专业的压测图表与报告那么功能强大,但是LR11不支持JDK7以上的测试,有时候用Jmeter生成个tps和响应时间的图还是没问题的。Jmeter也和LR差不多,有类似start,end和执行体。
首先导入jmeter需要的包
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;
Arguments getDefaultParameter()方法
此方法配置的是Jmeter界面所展示的参数,参数可配置为空:
@Override
/**
* JMeter界面中展示出此方法所设置的默认参数。
* @return
*/
public Arguments getDefaultParameters() {
Arguments args = new Arguments();
args.addArgument("url", "http://192.168.1.1:8080");
args.addArgument("userName", "test:tester");
args.addArgument("password", "testing");
return args;
}
setupTest()方法
为jmeter runTest()方法执行前的初始化代码,可用于创建长连接:
/**
* 执行runTest()方法前会调用此方法,可放一些初始化代码
*/
@Override
public void setupTest(JavaSamplerContext context) {
// 创建连接,什么都可
this.client = new Client(url, userName, password);
}
runTest()方法
需要执行的主要执行体:
@Override
/**
* 性能测试时的线程运行体,执行的业务方法放在这里。
*/
public SampleResult runTest(JavaSamplerContext context) {
// 创建SampleResult对象,用于记录执行结果的状态,并返回
SampleResult sampleResult = new SampleResult();
// 获取JMeter中输入的用户参数
String authUrl = context.getParameter("authUrl");
String userName = context.getParameter("userName");
String password = context.getParameter("password");
// 开始
sampleResult.sampleStart();
AccountResult accountResult = client.auth(authUrl, userName, password);
// 暂停
// sampleResult.samplePause();
// 重启
// sampleResult.sampleResume();
// 结束
sampleResult.sampleEnd();
sampleResult.setSuccessful(accountResult.isSuccess());
// 返回
return sampleResult;
}
teardownTest()方法
在runTest()方法执行完毕后,进行调用,通常可用于关闭连接:
/**
* 执行runTest()方法后会调用此方法,可放一些资源释放代码
*/
@Override
public void teardownTest(JavaSamplerContext context) {
// 关闭连接
this.client.close();
}
复制jar包
配置编写完上述方法后,导出为可执行jar包,将此jar包放入jmeter的lib-ext文件夹下:
启动jmeter
进入jmeter的bin目录,jmeter.bat启动jmeter
添加线程组
右键添加线程组,选择线程数及循环方式
添加java请求
右键线程组,添加sampler-Java请求
添加tps和响应时间的监听器
右键添加,保存并运行即可看到相应图表: