个人一直认为使用Loadrunner或者Jmeter来测试
java 方法都是费力不讨好的事情。java本身就有多线程机制,直接写个
测试类弄弄不就好了嘛。但是还是架不住很多人的需求,简单来讲一下如果使用Jmeter测试java request吧。
首先本人准备测试的jar包已经准备好了叫Hello.jar,源代码如下:
package com.test.webservice;
public class Hello
{
public String sayHello()
{
return "Hello";
}
public String sayHelloToPerson(String s)
{
if(s == null || s.equals(""))
s = "nobody";
return (new StringBuilder()).append("Hello ").append(s).toString();
}
public int sum(int a,int b)
{
return a+b;
}
}
|
要在Jmeter里面使用java request测试Hello.jar里面的方法,需要做一些
工作。
一、在eclipse(别的也可以)里面新建一个工程,把{Jmeter_home}\lib目录下的所有jar
(根据情况其实可以只用导入以下几个:ApacheJmeter_core.jar、Apache_Jmeter_java.jar、jorphan.jar、logkit-2.0.jar、avalon-framwork-4.1.4.jar)和被测的jar(包括被测试的方法需要用到的所有第三方jar)都导入到classpath。
二、编写测试类
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 com.test.webservice.Hello;
public class perftestbbb extends AbstractJavaSamplerClient {
private String a;
private String b;
/** Holds the result data (shown as Response Data in the Tree display). */
private String resultData;
//这个方法是用来自定义java方法入参的。
//params.addArgument("num1","");表示入参名字叫num1,默认值为空。
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("num1","");
params.addArgument("num2","");
return params;
}
public void setupTest(JavaSamplerContext arg0) {
}
public SampleResult runTest(JavaSamplerContext arg0) {
a = arg0.getParameter("num1");
b = arg0.getParameter("num2");
SampleResult sr = new SampleResult();
try {
sr.sampleStart();// jmeter 开始统计响应时间标记
Hello test = new Hello();
//通过下面的操作就可以将被测方法的响应输出到Jmeter的察看结果树中的响应数据里面了。
resultData = String.valueOf(test.sum(Integer.parseInt(a), Integer.parseInt(b)));
if (resultData != null && resultData.length() > 0) {
sr.setResponseData(resultData, null);
sr.setDataType(SampleResult.TEXT);
}
// System.out.println(resultData);
sr.setSuccessful(true);
} catch (Throwable e) {
sr.setSuccessful(false);
e.printStackTrace();
} finally {
sr.sampleEnd();// jmeter 结束统计响应时间标记
}
return sr;
}
public void teardownTest(JavaSamplerContext arg0) {
// System.out.println(end);
// System.out.println("The cost is"+(end-start)/1000);
}
//main只是为了调试用,最后打jar包的时候注释掉。
/* public static void main(String[] args) {
// TODO Auto-generated method stub
Arguments params = new Arguments();
params.addArgument("num1", "1");//设置参数,并赋予默认值1
params.addArgument("num2", "2");//设置参数,并赋予默认值2
JavaSamplerContext arg0 = new JavaSamplerContext(params);
perftestbbb test = new perftestbbb();
test.setupTest(arg0);
test.runTest(arg0);
test.teardownTest(arg0);
}*/
}
|
三、将测试类打成jar包放入{Jmeter_home}\lib\ext目录下,同时将被测试的jar包及被测试的方法需要用到的所有第三方jar都放入{Jmeter_home}\lib目录下。
四、重新打开Jmeter,添加sampler-java request,选择测试类。
其它的就参照常规做法即可。
最新内容请见作者的GitHub页:http://qaseven.github.io/