前一篇我们介绍了http请求的jmeter脚本的创建,现在我们介绍下,如何写java的接口性能测试;
首先,在eclipse环境下创建一个java工程,然后加入你要压测系统的jar包,同时还需要将jmeter的测试基础包加进来:ApacheJMeter_java.jar和ApacheJMeter_core.jar,这两个jar包在jmeter工具的lib\ext下可以找到;为了方便调试,还会增加一些jmeter的日志包:jorphan.jar,logkit-2.0.jar,commons-logging-1.1.1.jar,avalon-framework-4.1.4.jar,这些jar包,都可以在Jmeter工具的lib下面找到;
添加好依赖的jar包后,我们就可以来编写接口测试的内容了;
在org.apache.jmeter.protocol.java.test下,创建要测试的class类;
package org.apache.jmeter.protocol.java.test;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
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 被压测接口;
public class mbis_affiliateLogin extends AbstractJavaSamplerClient {
private static String label = "affiliateLogin";//定义label名称,显示在jmeter的结果窗口
private Map variableMap=new HashMap();;
long trackId ;
long buyerId ;
Date lastVisit;
private AsynchronousCall asynchronuoscall;//定义要测试的hsf接口
public void setupTest(JavaSamplerContext arg0) {
//定义测试初始值,setupTest只在测试开始前使用
}
public Arguments getDefaultParameters() {
//参数定义,显示在前台,也可以不定义
Arguments params = new Arguments();
params.addArgument("trackId", "24321435345");
params.addArgument("buyerId", "2031166562");
return params;
}
@Override
public SampleResult runTest(JavaSamplerContext arg0) {
// TODO Auto-generated method stub
SampleResult sr;
sr = new SampleResult();
sr.setSampleLabel(label);
boolean success=true;
//填写压测时传入的参数
variableMap.put("trackId",24321435345L);
variableMap.put("buyerId",2031166562L);
variableMap.put("lastVisit",new Date());
//执行开始
sr.sampleStart();
try {
//调用被压测接口的方法
asynchronuoscall.affiliateLogin(variableMap);
} catch (Throwable e) {
success=false;
} finally {
//执行结束
sr.sampleEnd();
sr.setSuccessful(success);
}
return sr;
}
}
写完接口测试类后,需要调试,就可以创建个main函数来调试一下结果:
package org.apache.jmeter.protocol.java.test;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
public class maintest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//把测试接口类new一个对象
mbis_affiliateLogin hsftest = new mbis_affiliateLogin();
JavaSamplerContext arg0 = new JavaSamplerContext(hsftest
.getDefaultParameters());
//初始值执行
hsftest.setupTest(arg0);
//执行部分调用
hsftest.runTest(arg0);
//执行结束处理
hsftest.teardownTest(arg0);
}
}
调试成功后,就可以来打测试jar包了,两种打包方式:
1.先把ApacheJMeter_java.jar解压,然后把创建的工程中,bin下面的class文件拷贝出来,拷贝到ApacheJMeter_java.jar的“org.apache.jmeter.protocol.java.test”下面
打开电脑的开始->运行,输入cmd,打开dos命令行,进入jmeter的ApacheJMeter_java所在目录中,执行打包命令,jar cf ApacheJMeter_java.jar org,这个就能重新打包一个ApacheJMeter_java.jar包了,然后把自己本地jmeter的lib/ext下的jar包给替换掉;
2.直接把测试类在eclipse下Export打成jar包,然后拷贝到jmeter的lib/ext下面,这个方法最简单,推荐使用;
打包结束后,还需要把被压测系统的jar包以及所需的依赖放入到jmeter工具的lib下面,这样才能调用到;
好了,现在再打开jmeter工具,添加线程组->事务控制器->java请求,这时候类名称里面,就可以看到你刚才工程中创建的类名了;
这样,java接口压测的脚本就创建成功啦~~~
很多时候,我们不单单需要java接口测试,有一些hsf的接口需要测试,这时候我们需要在测试类中添加hsfunit的东西,添加bean了
在setupTest之前,可以添加hsfstart的内容:
static {
//hsf启动版本
HSFEasyStarter.start("D:\\project", "1.4.8.7");
System.out.println("hsf start: ----------------");
try {
//sleep2s,等待地址推送
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
另外,在setupTest的里面,添加getbean的内容:
//配置getbean的xml地址
String[] locations = { "D:\\project\\works\\mbis_hsf_test\\src\\mbis_beans.xml" };
ApplicationContext context = new FileSystemXmlApplicationContext(locations);
//getbean的内容填写
registerService = (RegisterService) context.getBean("registerService");
在相应的地方,把bean文件填写了就可以了(可以参考下hsf单元测试的编写内容),同时不要忘记把用到的如spring、hsfunit的jar包也放入到jmeter的lib下就可以了