您的位置:首页 > 编程语言 > Java开发

jmeter之java请求二次开发

2017-06-14 16:34 169 查看

说明与步骤

原则上jmeter的java请求,可以压测一切可使用java访问的东西,包括Redis,MQ等等。

需要lib/ext中的ApacheJMeter_core.jar,如扩展java请求则还需要ApacheJMeter_java.jar,扩展http请求则需要ApacheJMeter_http.jar,依次类推,都在lib/ext中,另外lib中的avalon-framework-4.1.4.jar根据实际需要也会用到(jmeter3.2中名称是framework)

下文中的代码,则是具体的被测类和测试类的编写。(当然,你要先用eclipse创建工程,导入前面说的jar包,再新建package,新建class,撸代码),完成后导出被测jar包放到lib中,测试用的jar包放到lib/ext中。

新建java请求,就可以看到。并传入响应的参数。比如method=add,num1=111,num2=222,然后点击执行,就可以看到结果,如下图。





代码实例

被测类

public class Calc {

public int add(int x, int y){

return x + y;

}

public int minus(int x, int y){
return x - y;
}


}

测试类

package com.cmos.test;

/*

* 一般来说,扩展java请求通常需要的类有:

* AbstractJavaSamplerClient

* JavaSamplerContext 容器类

* SampleResult 结果统计类

* Argument 参数类

* */

import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;

import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;

import org.apache.jmeter.samplers.SampleResult;

import org.apache.jmeter.config.Arguments;

import java.util.Random;

import com.cmos.JmeterTest.Calc;

public class TestCalc extends AbstractJavaSamplerClient {

/*

* 一般来说,需要定义全局变量,是用来实现逻辑处理

* 包括控制变量、入参、结果。一般由被测方法决定

* */

private String method;

private int x;

private int y;

private String resultData;

Calc c = new Calc();

/*

* 通过getDefaultParameters()可以来定义入参

*

* */

public Arguments getDefaultParameters(){
//定义属性对象,用来添加GUI参数
Arguments params = new Arguments();
//添加一个GUI参数,名称叫"method",值是"add"
params.addArgument("method", "add");
params.addArgument("num1","111");
params.addArgument("num2",null);
return params;
}
//每个线程测试前执行一次,做一些初始化工作;
public void setupTest(JavaSamplerContext arg0) {
}

//JavaSampleContext arg0()就是用来接收GUI所提交的
@Override
public  SampleResult runTest(JavaSamplerContext arg0) {
// TODO Auto-generated method stub
SampleResult sr = new SampleResult();
try{
//将GUI界面传递过来的值赋给全局变量
method = arg0.getParameter("method");
x = Integer.parseInt(arg0.getParameter("num1",null));
y = Integer.parseInt(arg0.getParameter("num2",null));
//是表示请求开始计时
sr.sampleStart();
//实际测试不需要,模拟处理过程中所需消耗的时间


// Random rnd = new Random();

// Thread.sleep(rnd.nextInt(1000));

//通过GUI传递的method参数来决定所执行的方法
if(method.equals("add")){
resultData = String.valueOf(c.add(x, y));
}
else if(method.equals("minus")){
resultData = String.valueOf(c.minus(x, y));
}
if(resultData != null && resultData.length()>0){
//设置响应数据为resutlData;也可以用sr.setSamplerData("OK");
sr.setResponseData(resultData,null);
//设置响应代码为0
sr.setResponseCode("0000");
//设置响应类型为text
sr.setContentType(SampleResult.TEXT);
//设置响应状态为true
sr.setSuccessful(true);
//设置响应信息
sr.setResponseMessage("方法执行成功!");
}
else{
sr.setResponseData(resultData,null);
//设置响应代码为-9999
sr.setResponseCode("-9999");
//设置响应类型为txt
sr.setContentType(SampleResult.TEXT);
//设置响应状态为true
sr.setSuccessful(false);
//设置响应信息
sr.setResponseMessage("方法执行失败!");
}

}
catch(Exception e){
sr.setResponseData(e.getMessage(),null);
e.printStackTrace();
sr.setResponseCode("-1");
sr.setContentType(SampleResult.TEXT);
sr.setSuccessful(false);
sr.setResponseMessage("捕获异常!");
}
finally{
//表示请求结束计时
sr.sampleEnd();
}

//表示返回这个SampleResult对象sr
return sr;
}
public void teardownTest(JavaSamplerContext arg0) {
// System.out.println(end);
// System.out.println("The cost is"+(end-start)/1000);
}


}

其他参考链接

http://www.cnblogs.com/yangxia-test/p/4019541.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息