jmeter是基于java开发的开源性能和接口测试工具。它能够满足基于很多协议的接口性能测试,例如http、ftp、tcp等等,但是有些公司自己内部开发一些框架,那么测试基于这些框架开发的接口时就需要通过自定义的方式编写测试代码,下面介绍了如何利用JMeter提供的Java Sampler扩展机制来方便地扩展对新协议的支持。
1、开发脚本前的准备
1)打开Java编译器,新建一个项目TestNumber,然后新建一个包test。
2)从Jmeter的安装目录lib/ext中拷贝两个文件ApacheJMeter_core.jar和ApacheJMeter_java.jar到TestNumber项目中,然后引入这两个JAR包。
3)在test包中新建一个类,类名为TestNum,该类继承AbstractJavaSamplerClient类,AbstractJavaSamplerClient存在于ApacheJMeter_java.jar这个JAR包中,引用即可调用。
2、开发自定义的Java Sample包括两个方面:
1)扩展JMeter的类:org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient
2)实现下面的4个方法:
/**必需实现的方法**/
publicSampleResult runTest(JavaSamplerContext context)
/**可选实现的方法**/
public Arguments getDefaultParameters()
public void setupTest(JavaSamplerContext context)
public void teardownTest(JavaSamplerContext context)
runTest方法的返回结果为SampleResult,就是每次调用返回的结果。
getDefaultParameters方法在运行测试的时候,需要用户提供一些输入,这些输入甚至可能是JMeter的变量,这个方法的用处就在于允许用户在测试开始,或者运行期间指定变量的值。
setupTest跟写JUnit测试的setup方法类似,这里主要运行一些针对一个虚拟用户的一次性起始、准备性的操作,比如建立连接的过程在测试阶段可能只需要一次,那么这段建立连接的逻辑可以放在该方法里。
teardownTest与JUnit测试的teardown方法类似,这里主要运行一些针对一个虚拟用户的收尾的操作,比如清除连接等。这里需要注意的是,该方法的调用不是在单个虚拟用户的线程里执行的操作,而是所有虚拟用户在一个线程里顺序执行的。
3、实现一个案例
package jmeter;
import com.bj58.spat.cmc.entity.CategoryEntity;
import com.bj58.ads.advuseragent.contract.ICmcProxyService;
import com.bj58.spat.scf.client.SCFInit;
import com.bj58.spat.scf.client.proxy.builder.ProxyFactory;
//import static org.hamcrest.CoreMatchers.nullValue;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.samplers.SampleResult;
//GetCategoryByID<InfoTransferService>
public class GetCategoryByID extends AbstractJavaSamplerClient {
private static ICmcProxyService iCmcProxyService;
CategoryEntity resultData=null;
static long start=0;
static long end=0;
int idcateid=0;
String IADS_SERVICE=null;
//private SampleResult results;
//private String a;
//用于jmeter中获取默认参数
public Arguments getDefaultParameters() {
Arguments params=new Arguments();
params.addArgument("idcateid","4381");
return params;
}
//准备性的操作
public void setupTest(JavaSamplerContext arg0) {
String scf_Config = "E:\\softs\\测试\\性能\\Jmeter\\apache-jmeter-modify-2.13\\apache-jmeter-modify-2.13\\lib\\ext\\scf.config";
SCFInit.init(scf_Config);
//SampleResult results=new SampleResult();
String URL = "tcp://advuseragent/CmcProxyService";
IADS_SERVICE = "advuseragent";
iCmcProxyService=ProxyFactory.create(ICmcProxyService.class, URL);
System.err.println("setupTest");
}
//返回测试结果
public SampleResult runTest(JavaSamplerContext arg0) {
SampleResult results = new SampleResult();
results.sampleStart();
try {
idcateid=arg0.getIntParameter("idcateid");
this.resultData = iCmcProxyService.GetCategoryByID(idcateid);
if (this.resultData!=null) {
results.setSuccessful(true);
// System.out.println(resultData);
}
else
results.setSuccessful(false);
}catch (Exception e) {
results.setSuccessful(false);
e.printStackTrace();
}finally {
results.sampleEnd();
System.err.println("runTest");
}
return results;
}
//关闭当前连接
public void teardownTest(JavaSamplerContext arg0) {
}
public static void main(String[] args) {
Arguments param=new Arguments();
param.addArgument("idcateid","4381");
JavaSamplerContext arg0=new JavaSamplerContext(param);
GetCategoryByID test=new GetCategoryByID();
test.setupTest(arg0);
test.runTest(arg0);
test.teardownTest(arg0);
}
}
调试没有问题后,将以上脚本导入jar包
4、jmeter中添加自定义包