用jmeter进行接口测试
1、安装好jdk
我安装的是jdk1.6
2、下载jmeter,解压即可
下载地址:http://jmeter.apache.org/download_jmeter.cgi
apache-jmeter-2.9.tgz | md5 | pgp |
jmeter目录结构:
C:\apache-jmeter-2.9\bin bin目录一般存放jmeter的运行脚本
jmeter.bat jmeter启动脚本
jmeter.log jmeter日志文件
jmeter.properties jmeter属性文件,配置日志的级别、启动参数等相关信息
C:\apache-jmeter-2.9\lib lib目录存放jmeter依赖的jar包
C:\apache-jmeter-2.9\lib \ext ext目录存放用户扩展包,如我们写好的接口脚本,打成jar包后就放在此目录
C:\apache-jmeter-2.9\docs jmeter文档目录,包含api
3、编写接口测试脚本
针对需要进行接口压力测试的类编写脚本
在编写脚本前导入jmeter依赖的jar包:
ApacheJMeter_core.jar、ApacheJMeter_java.jar
用实例来详细讲解一下过程:
需要进行接口压力测试的类:Test .java
源码:
package mxm;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class Test {
/**
* 该方法从list中查找指定字符串 然后返回
* @param list
* @param id
* @return
* @throws IOException
*/
public String getList(List<String> list ,String id) throws IOException{
if(list == null) return null;
for(int i = 0 ; i < list.size(); i++){
if(id.equals(list.get(i))){
return list.get(i).toString();
}
}
return null;
}
public static void main(String []args) throws IOException{
System.out.print("bbbbb");
Test test = new Test();
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
test.getList(list, "2");
}
}
编写jmeter接口测试脚本类:JmeterTest.java
该类需要继承jmeter的抽象类:AbstractJavaSamplerClient。一般会重写该类的3个方法:
setupTest()//进行初始化的工作
runTest() //进行压力测试
teardownTest()//结束后的释放工作
源码:
package mxm;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
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;
public class JmeterTest extends AbstractJavaSamplerClient {
private static long start = 0;
private static long end = 0;
/**
* 初始化工作
*/
public void setupTest(JavaSamplerContext arg0) {
start = System.currentTimeMillis();
}
/**
* 获取参数
*/
public Arguments getDefaultParameters(){
Arguments args = new Arguments();
//添加参数
args.addArgument("id", "66");
args.addArgument("list", "11:22:33:44:55:66:77");
return args;
}
@Override
public SampleResult runTest(JavaSamplerContext arg0) {
//定义一个取样器对象 通过调用该对象的方法开始压力测试
SampleResult sp = new SampleResult();
// 获取jmeter传入参数
String id = arg0.getParameter("id");
String str = arg0.getParameter("list");
List<String> list = new ArrayList<String>();
//分割list字符串
if(null != str){
String []s = str.split(":");
for(int i = 0; i < s.length; i++){
list.add(s[i]);
}
}
//开始测试test.getList()方法的性能
sp.sampleStart();
//测试接口性能
Test test = new Test();
String ss = null;
try {
ss = test.getList(list, id);
} catch (IOException e) {
//如果出现异常则 设置结果为 false
sp.setSuccessful(false);
sp.setResponseMessage(e.getMessage());
e.printStackTrace();
}
System.out.println("result: " + ss);
sp.sampleEnd();
//设置测试结果
if (ss.equals("66")) {
sp.setSuccessful(true);
sp.setResponseMessage("66 ok");
} else {
sp.setSuccessful(false);
sp.setResponseMessage("false");
}
//返回取样器
return sp;
}
/**
* teardown方法 该方法在测试结束后调用 用来释放变量等善后工作
*/
public void teardownTest(JavaSamplerContext arg0){
end = System.currentTimeMillis();
//可以在调试的时候自己打印时间
System.err.println("start time: " + start);
System.err.println("end time: " + end);
System.err.println("cost time:" + (end - start) / 1000);
super.teardownTest(arg0);
}
/**
* main 方法 用来调试 调试成功后export成jar包
* @param args
*/
public static void main(String []args){
System.out.println("bbbbb");
//new 一个jmetertest对象
JmeterTest r = new JmeterTest();
//取得默认的参数 该参数即为调用接口需要传入的参数
Arguments a = r.getDefaultParameters();
//定义一个取样器
JavaSamplerContext j = new JavaSamplerContext(a);
//压力测试初始化工作
r.setupTest(j);
//开始压力测试
r.runTest(j);
//结束 释放变量
r.teardownTest(j);
}
}
调试通过后,将该工程export成jar包aa.jar,并将aa.jar包放入jmeter的lib/ext目录下,接下来就可以在jmeter中添加测试计划,对该接口进行压力测试了。
在这个过程中可能会遇到下面的问题:
导出jar包报错:
JAR export finished with warnings.See details for additional information
解决:提示导出完成,但是有警告。这可能是编写的脚本中有没有使用的变量或者没有使用import类,却掉即可(eclipse中会呈现黄色标记出来)。
调试JmeterTest出错:
Could not find the main class:mxm.JmeterTest.Program will exit
解决:jmeter依赖的jar包没有导入。在jmeter安装目录的lib下面,将所有的jar包导入工程。
这里只依赖几个包,但是我当时没有找到,所以全都导入了
4、编写测试计划
在jmeter目录bin目录下,双击jmeter.bat 运行,即可打开jmeter
首先添加一个测试计划:
然后在测试计划中添加一个线程组,设置线程数,线程启动时间,循环次数
在线程组下面添加一个java采样器,选择需要测试的类,这里会自动将你的JmeterTest中的参数读取出来。
如果需要批量设置参数,可以将参数保存在cvs文件中,在参数列表中使用{}的形式,
为java采样器添加一个检测器,用来检测运行的结果。
5、查看运行结果