之前已经分享过如何用java进行压力测试,然而,那种直接用代码压测的缺乏图形化GUI的直观。同时,只能够单机进行压测,有些情况下,比如webservice的压测需要大量的序列化反序列化xml,这些很消耗CPU之类的资源的压力测试,单机根本不足。
基于上述的原因,我选择了jmeter来进来一些压力测试用例的实施,像普通的http压力测试的对jmeter来说都小菜一碟,同时分布式的压力测试对jmeter来说更是对用户透明的。jmeter的资料在网上已经很足够,就不怎么重复了,这次想要重点讲的是如何定义自己的压力测试的用例。
类似于之前的压力测试模板,jmeter也提供了模板给我们,它就是在线程组下新建sample-》java请求,我们在java请求的选择中会有几个默认的test可以让我们选,这几个都是demo,我们今天要做的就是模仿下这个demo来实现自己的test,来让jmeter加载我们的test。
在这个红线框出的就是我们自己定义的test。
要实现这样一个test,只需要我们写个类实现jmeter提供的
AbstractJavaSamplerClient 模板类
,然后实现里面的
public SampleResult runTest(JavaSamplerContext javaSamplerContext),然后将该类打包成jar包,并且扔进去${jmeter_home}/lib/ext/下,jmeter就会自己在java请求面板中加载。
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
SampleResult results = new SampleResult();//这个一定要定义,jmeter调用根据这个来计算调用率
try {
results.sampleStart();//开始调用
results.setSampleLabel("lsz");//设置聚合报告中的名字
Thread.sleep(100);
results.setSuccessful(true);
results.setResponseCodeOK();
results.setBodySize(100);
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
results.sampleEnd();//一定要end,不然jmeter不统计这次结果~
}
return results;
}
同样的,我们可以自己定义初始化的参数,只需要重写
public Arguments getDefaultParameters()返回参数的列表就可以了。
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("SleepTime", String.valueOf(1000L));
params.addArgument("SleepMask", "0x" + Long.toHexString(1023L).toUpperCase(Locale.ENGLISH));
return params;
}