测试工具:myecplise10.5
jdk版本:1.8.73
jmeter: 2.13
一、核心步骤
1.创建一个Java工程;
2.将JMeter的lib目录下的jar文件添加进此工程的Build Path;
3.创建一个类并实现JavaSamplerClient接口或继承AbstractJavaSamplerClient,并重写;
public Arguments getDefaultParameters();设置可用参数及的默认值,已设置的参数会显示在jmeter GUI的参数列表中;
public void setupTest(JavaSamplerContext arg0):每个线程测试前执行一次,做一些初始化工作;
public SampleResult runTest(JavaSamplerContext arg0):开始测试,从arg0参数可以获得参数值,并调用被测方法,完成与服务器的交互;
public void teardownTest(JavaSamplerContext arg0):测试结束时调用;
setupTest和teardownTest方法不需要时可以不写。runTest 该方法是java Sampler实现的重点,执行次数取决于线程数和循环次数。
以上4个方法中只有runTest是必须实现的,其他3个可根据需求去覆盖。这4个方法执行的先后顺序与其前面的显示顺序相对应。
如果需要对多个方法进行性能测试,则需要建多个测试类,多个测试类可以放在同一个包下面,也可以放在单独的包中。
4.Export为Runnable Jar File;
5.将此jar包放入JMETER_HOME\lib\ext目录;
6.以管理员身份打开JMeter;
7.创建线程组、Java Request、查看结果树,进行测试;
二、实例
1.在eclipse里面新建一个工程:JavaForJMeter
2.把{Jmeter_home}\lib目录下的所有jar,引用的jar包复制到lib目录,并添加进此工程的Build Path;
注意:lib\ext目录下ApacheJMeter_core.jar,ApacheJMeter_java.jar两个jar包肯定需要build到项目中,另外还需要对其如果在ecplise中执行时报其他错可再添加相应的jar包。为方便,就可导入lib目录下的所有jar包。
Logkit-2.0.jar :记录 jmeter 打屏日志使用的包
Httpclient-4.3.2.jar : http 相关接口包
3.添加类Hello,代码如下:
package test;public classHello {publicString 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,intb)
{return a+b;
}
}
4.添加类perftest,并继承AbstractJavaSamplerClient,并添加代码如下:
注意:
1)System.out等的输出会显示在启动JMeter时的命令窗口内,但过多的输出会影响性能的准确性。
2)http请求在任何情况下都会有给客户端一个反馈,但是java请求不一定。在设置的压力较大时,服务器可能会吃不消直接异常退出,客户端获取不到任何返回值,保存返回结果的对象(如本例中的resultData)的值就为null。所以需要做空指针的判断,保证代码的正常运行。
package test;
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 test.Hello;public classtest extends AbstractJavaSamplerClient {privateString a;privateString b;privateString resultData = null ;//这个方法是用来自定义java方法入参的。//params.addArgument("num1","");表