JMeter 进行性能测试(Java 请求)测试实例说明
1.建立测试计划
启动 jmeter 后,jmeter 会自动生成一个空的测试计划,用户可以基于该测试计划
建立自己的测试计划。如图 1:
图 1
2.添加线程组
1.添加线程组
一个性能测试请求负载是基于一个线程组完成的。一个测试计划必须有一个线程组。
测试计划(右键)-->添加-->Threads(Users)--->线程组)中选择线程组即可。
图 2
图 3
2.线程属性
1.线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这
里也就是设置多少个线程数。
2.准备时长: 设置的虚拟用户数需要多长时间全部启动。如果线程数为5 ,准备时长
为10 ,那么需要10秒钟启动5个线程。也就是每2秒钟启动1个线程。
3.循环次数:每个线程发送请求的次数。如果线程数为100 ,循环次数为10 ,那么每个
线程发送10次请求。总请求数为100*10=1000 。如果勾选了“永远”,那么所有线程会
一直发送请求。
3.添加 Java 请求
线程组(右键)--->添加--->Sampler--->Java 请求)选择 Java 请求。对于 jmeter 来
说,取样器(Sampler)是与服务器进行交互的单元。一个取样器通常进行三部分的工
作:1.向服务器发送请求 2.记录服务器的响应数据 3.记录相应时间信息
图 4
图 5
Java 请求的属性相对较少 需要关注的就二个属
1. 类名称:通过点击三角下拉选择所需要的测试的 java 类 这个类需要继承 Jmeter 的
AbstractJavaSamplerClient。
自定义测试的 java 类编写详见第 7 小节 Jmeter 之自定义 Java 请求
2. 同请求参数:jmeter 提供了一个简单的对参数化的方法。用户可以将请求中所有参
数设置在本表中,表中的每一行是一个参数值对(对应请求中的 名称=值),图 5
的参数表中有一个值是${deviceId} 这个涉及到 参数化详见第 8 小节 Jmeter 之参
数化
4.添加监听器
脚本的主要部分设置完成后,需要通过某种方式获得性能测试中的测试结果,这就需
要添加监听器。在这里只介绍添加聚合报告,其它的添加都是一样。聚合报告分析请看
第 6 小节聚合报告分析
线程组(右键)--->添加--->监听器--->聚合报告 中选择聚合报告。
图 6
5.运行脚本
点击工具栏上的运行按钮,或者点击菜单栏“ 运行--->启动 ”或者点击工具栏的启动按钮 或
者使用快捷键 ctrl+r 来运行程序。
图 7
6.聚合报告分析
查看聚合报告的运行结果:
图 8
图 9
7.Jmeter 之自定义 Java 请求编写
1.新建测试项目
创建一个 java 工程 ,在这里我用的工具是 eclipse
图 10
2.引入 JMeter 的 jar 包
从 Jmeter 的安装目录 lib\ext 中拷贝两个文件
ApacheJMeter_core.jar
ApacheJMeter_java.jar
在我编写的例子中还有用的其它的 jar 如 jorphan.jar 等直接从从 Jmeter 的安装目录 lib
复制过来.
图 11
3.写测试类
测试类称需要 继承 AbstractJavaSamplerClient 类
类方法说明:
getDefaultParameters 方法:主要用于设置传入的参数
setupTest 方法:为初始化方法,用于初始化性能测试时的每个线程
runTest 方法:为性能测试时的线程运行体
teardownTest 方法:为测试结束方法,用于结束性能测试中的每个线程
在 runTest 编写调用 java 程序
1.采样开始:sampleStart();
2.调用 java 程序
3.采样结束:sampleEnd()
4.返回结果判断:setSuccessful()
类代码如下:
//包名和引入包省略。。
public class JmeterScoketTest extends AbstractJavaSamplerClient {
// 测试结果
private SampleResult sr;
private static String label = "socket";
/**
* 为初始化方法,用于初始化性能测试时的每个线程
*/
public void setupTest(JavaSamplerContext arg0) {
System.out.println("setupTest");
}
/**
*
* 主要用于设置传入的参数
*/
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("host", "localhost");
params.addArgument("port", "8090");
params.addArgument("deviceId","123456");
return params;
}
/**
* 为性能测试时的线程运行体
*/
@Override
public SampleResult runTest(JavaSamplerContext arg0) {
String host = arg0.getParameter("host");
String port = arg0.getParameter("port");
String deviceId = arg0.getParameter("deviceId");
sr = new SampleResult();
sr.setSampleLabel(label);
try {
sr.sampleStart(); // 记录程序执行时间,以及执行结果
ClientHandlerTest client = new ClientHandlerTest();
client.setDeviceId(deviceId);
client.MemMonClient(host,port);//这个是需要调用的操作方法
sr.setSuccessful(true);
System.out.println("end");
} catch (Throwable e) {
sr.setSuccessful(false);
} finally {
sr.sampleEnd();
}
return sr;
}
}
/**
*
* 结束
*/
public void teardownTest(JavaSamplerContext arg0) {
System.out.println("teardownTest");
}
个人经验:自定义 java 请求除继承 AbstractJavaSamplerClient 类 外不要再实现其它类否则
可能 Jmeter 在添加 Java 请求时会找不到自定义类。
4.调用自定义 java 请求
给定义 java 请求工程打包 如 DragonjmeterTestSocket.jar
把打好的包拷贝到 Jmeter 的安装目录 lib\ext 中;
个人经验:工程中引用到的包也需要拷贝到 Jmeter 的安装目录 lib 中,不然可能会报错。
我自己就碰到过报类找不到的错误!
以上这些完成后重新启动 Jmeter 就可以在第三节类名称那里找到 你所编写的自定义类。
8.Jmeter 之参数化
用 Jmeter 包含两种情况的参数,一种是在 url 中,一种是请求中需要发送的参数。
这里主要是介绍请求中需要发送的参数也就是同求参数 见上图 5
Jmeter 参数化方法很多 在这里我只介绍 CSV Data Set Config 方法,但我没有试过,有兴趣
可以自己试一下。除此之外 Jmeter 还有其它的几种参数化的方法有兴趣可以自己去了解。
1.新建 deviceId.csv 文件(.txt/.dat 类型也是可以的我没有测试过有兴趣可以测试下) 下面
是我建的设备编号的参数