目录
一、前言
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、 下面就可以开始利用远程负载机进行性能测试了。
要使用 JMeter 进行远程负载机的性能测试,你需要设置一个主 JMeter 服务器和多个远程负载机。以下是一般的步骤:
-
在远程负载机上安装 JMeter:
- 在每台远程负载机上,按照之前提到的步骤安装和配置 JMeter。
-
配置远程负载机:
- 在每台远程负载机上,编辑 JMeter 的 "jmeter.properties" 文件,设置 "server.rmi.localport" 和 "server_port",确保它们在每台机器上唯一。
-
启动 JMeter Server:
- 在每台远程负载机上,通过命令行启动 JMeter 服务器,命令类似于:
jmeter-server -Djava.rmi.server.hostname=<remote_host_ip>
。
- 在每台远程负载机上,通过命令行启动 JMeter 服务器,命令类似于:
-
配置主 JMeter 主控制器:
- 在主 JMeter 控制器中,打开 JMeter 并配置 "Remote Start"。
- 在 "Remote Start" 中添加远程负载机的 IP 地址和端口号。
-
编写测试计划:
- 在主 JMeter 控制器中,创建你的测试计划,包括线程组、各种请求、断言等。
-
分发测试计划:
- 将测试计划保存并在主 JMeter 控制器中启动测试。
-
监控测试执行:
- 在主 JMeter 控制器中,你可以监控所有远程负载机的测试执行情况,包括吞吐量、响应时间等。
通过以上步骤,你可以利用远程负载机进行性能测试,并且在主 JMeter 控制器上集中管理和监控所有远程负载机的测试执行情况。这样可以更好地模拟真实负载情况,进行大规模并发用户的压力测试。