jmeter和loadrunner一样包含了测试脚本开发、测试执行、以及测试结果统计三个部分。只是jmeter没有脚本开发工具,因此测试java请求的脚本选择在eclipse中进行。
首先介绍如何用eclipse编写接口性能测试脚本。
针对"Java请求"类型的测试,需要基于JMeter测试框架编写用例。
1、新建一个普通的Java工程或者maven工程;
2、将 $JMeter安装目录/lib/ 目录引入工程;在java工程名上点鼠标右键选择build Path里面的Configure Build Path进入下面的jar包添加窗口。
点击Add External JARs..选择jmeter安装目录下的/lib/ext目录下的包加进来。
3、新建Java Class,如下的" testworkdayservicejmeter ",并继承"AbstractJavaSamplerClient";
package test.pssservice;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
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 testworkdayservicejmeter extends AbstractJavaSamplerClient{
private static long start = 0;
private static long end = 0;
public testpssWorkDayService pssAPItest;
//设置可用参数及的默认值;
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("workday", "");
return params;
}
public void setupTest(JavaSamplerContext arg0) {
try{
pssAPItest=new testpssWorkDayService();
}catch (Exception e1) {
e1.printStackTrace();
}
}
public SampleResult runTest(JavaSamplerContext arg0) {
SampleResult sr = new SampleResult();
try
{
sr.sampleStart();// jmeter 开始统计响应时间标记
String tmpde=arg0.getParameter("workday");
DateFormat dft=new SimpleDateFormat("yyyy-MM-dd");
Date tmpdate=dft.parse(tmpde);
boolean tmpresult=pssAPItest.isworkday(tmpdate);//调用接口方法
if (tmpresult){
sr.setSuccessful(true);
}
else{
sr.setSuccessful(false);
}
sr.sampleEnd();
}catch (Exception e1) {
e1.printStackTrace();
sr.setSuccessful(false);
sr.sampleEnd();
}
return sr;
}
public void teardownTest(JavaSamplerContext arg0) {
pssAPItest=null;
}
}
4、导出成Jar并置于 $JMeter安装目录/lib/ext/ 下,若有依赖Jar也置于 $JMeter安装目录/lib/ 下;
5、启动或重启JMeter。
其次讲一下如何在jmeter中执行接口性能测试。
将上一步导出的jar包放在$JMeter安装目录/lib/ext/ 下,然后把需要的参数化文件也拷贝到压力机上的磁盘目录上面(参数化文件可以与jar目录相同也可以不同)。
1.运行jmeter.bat打开jmeter主界面;
2.在测试计划里面将包加进来;
在测试计划下添加线程组元件,然后在线程组下面添加java请求元件、CSV Data Set Config元件和聚合报告元件。如果不需要参数化的话,CSV Data Set Config元件可以不需要。
聚合报告元件用于显示测试的结果。
3.在java请求中的测试类选出来
此处测试的类是test.pssservice.testworkdayservicejmeter。
4.设置参数化文件信息
filename处填写参数化文件的绝对路径和参数文件名称;
File encoding是参数化文件的编码,一般为utf-8;
Variable Names参数文件中对应的参数名称,如果有多个用“,”隔开;
Delimiter表示同一个参数文件中有多个参数的,此处列出他们的分隔符;
5.测试结果通过聚合报告列出来
如果有多个接口的话,需要添加多个线程组,每个线程组一个java请求,然后将聚合报告添加到测试计划下。
然后是测试结果的统计
聚合报告中的throughput相当于loadrunner当中的tps,average相当于loadrunner中的平均响应时间,samples相当于总的通过事务数。error表示失败率。
最后讲讲利用jmeter进行分布式测试
在进行性能测试时,需要模拟多用户并发访问,但是由于单台负载机模拟用户数量有限,我们期望使用多台负载机进行负载模拟,利用JMeter进行性能测试时,可以在多台负载机上部署JMeter,如我们有23台性能测试机,其中一台为主控机(192.168.6.117),另外一台为负载机192.168.6.235),具体配置方法如下:
1、 在主控台(192.168.6.117)的JMeter机器上,打开JMeter目录bin文件夹下的jmeter.properties文件,修改remote_hosts=192.168.6.117:1099,192.168.6.235:1099保存后,重启192.168.6.117。
2、 分别运行负载机192.168.6.117,192.168.6.235上的jmeter-server.bat
3、 运行主控台192.168.6.117 JMeter的jmeter.bat,打开GUI界面,打开“运行”菜单下的“远程控制”,可以看到新添加的负载机192.168.6.117,192.168.6.235,如下图所示:
4、 下面就可以开始利用远程负载机进行性能测了。