Hello JMeter

JMeter简介

JMeter是Apache组织开发的基于java的压力测试工具。最初用于web应用测试,后来被扩展至其它领域。JMeter是使用多线程模拟用户群的方式,完成对应用的压力测试。

在移动应用领域,压力测试分为两部分,APP端的压力测试和后台的压力测试。

APP端的压力测试,通常使用Monkey/MonkeyRunner来进行,而对于后台的压力测试,JMeter是一个不错的选择。

相比强大的LoadRunner(11.0,版,3.1G),JMeter相对小巧(15M)。两者最大的区别在于,前者可以模拟不同IP。

 

JMeter环境设置

JMeter当前版本为4.0。

下载地址为:JMeter Apache

下载后,直接解压即可。

JMeter的使用需要JDK环境。因此JDK环境变量的设置是必须的,本文不再过多描述。

JMeter也需要进行环境变量设置。

JMETER_HOME:解压路径。

并在PATH中,添加%JMETER_HOME%\lib; %JMETER_HOME%\lib\ext

点击%JMETER_HOME\bin%目录下的JMeter.bat即可启动。

启动界面如下:


示例

之前做了一个Springboot项目,处理APP端发送的一个数据签名请求,就用JMeter来进行一下压力测试,记录一下JMeter的使用过程。

先来看一下,最终建立的示例PLAN结构。这里只是给出一个结构,个人搭建时不必强求一样。

创建TestPlan

点击File->New,创建Test Plan。

Test Plan:等同于一个测试工程。该工程仅有一个文件,后缀为jmx,XML文件格式。在JMETER中进行的所有设置,都存在于该文件中。

创建Thread Group

选择TestPlan->右键->Threads(Users)->ThreadGroup。

Thread Group可以看做是用户组,每条Thread可以看做是一个用户。

Number of Threads:用户数量。

Ramp-Up Period(in seconds):多长时间内,将所有的用户请求发完。仅仅是发送,不包括接收。

Loop:循环次数。所有请求发送完毕,为1次。

创建User DefinedVariables

选择TestPlan或ThreadGroup->右键->add->ConfigElement->User Defined Variables。

User Defined Variables用于定义变量。例如,定义KW_DATA,使用时调用${KW_DATA}。注意,KW_DATA的值将直接替换${KW_DATA}。对于String类型来说,若KW_DATA的值无“”,则替换位置无“”。

如果有注意的话,在TEST PLAN中也可以定义User Defined Variables。

创建Http Request

选择ThreadGroup->右键->add>Sampler->UserDefined Variables。

HttpRequest是最主要的部分。这里将填写URL,PATH,PORT,PROTOCOL,METHOD,以及传输数据。


可以看到,我们在UI中使用到了之前定义的变量。

需要注意的是Body Data中的${send}未曾定义,后面再解释。

创建Http Header Manager

选择TestPlan或ThreadGroup->右键->add->ConfigElement->Http Header Manager。

HTTP Header Manager用于管理Header中添加的参数。比如:Content-Type,或其他自定义参数。

BeanShell PreProcessor

选择TestPlan或ThreadGroup->右键->add->PreProcessors。

Bean Shell PreProcessor在发送数据前,对数据进行处理。例如,加密。

需要指出的是,处理后的数据,会被填充至HTTP Request中,而后发送。而非将HTTPRequest中的数据进行处理后,直接发送。

示例代码如下:

log.info("import finished");

JSONObject jsonObject1 = new JSONObject();
jsonObject1.put(${KW_1},"00112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566");
jsonObject1.put(${KW_2},"00112233445566778899001122334455");
jsonObject1.put(${KW_3},"00112233445566778899");
jsonObject1.put(${KW_4},"00112233");
jsonObject1.put(${KW_5},"00112233");
jsonObject1.put(${KW_6},"00");
jsonObject1.put(${KW_7},"001122");
jsonObject1.put(${KW_8},"001122334455667788990011223344556677889900112233445566778899001122");
jsonObject1.put(${KW_9},"0011223344");
jsonObject1.put(${KW_10},"0011");

JSONArray jsonArray=new JSONArray();
jsonArray.add(jsonObject1);
JSONObject jsonObject=new JSONObject();
jsonObject.put(${KW_TIME},"20180319180000");
jsonObject.put(${KW_DATA},jsonArray);

log.info("json data is OK");

byte[] encrypted;
try {
	encrypted = Crypto.AES......ing(jsonObject.toString().getBytes("utf-8"),new ByteArray(${TransKey}).getBytes());
} catch (Exception e) {
	e.printStackTrace();
}
		
String base64 = Base64.encode(encrypted);
System.out.println("base64 msg is "+base64);
String sign = RSA.sign(base64,${UserRSAPriKey});
System.out.println("sign msg is "+sign);
String send = base64+sign;
vars.put("send",send);

Beanshell,Lightweight Scriptfor java,因此,这里直接拷贝测试用的JAVA代码即可。在需要的地方,使用${XXXXX}调用JMeter变量即可。

此外,还要注意,若有第三方jar包引用,需要将jar放到PATH的相关目录中。建议%JMETER_HOME%\lib\ext目录下,方便管理。

这里还需要强调一下:

代码中的vars实为map,是JMETER中的常量。通过指定KEYWORD,与JMETER进行通讯。例如我们此前在HTTP Request Body Data中使用到的${send},就是在此处定义,并赋值的。

创建Bean Shell PostProcessor

选择TestPlan或ThreadGroup->右键->add->PostProcessors。

与Bean Shell PreProcessor相反,Bean ShellPostProcessor对接收后的数据进行处理。

示例代码如下:

String resp=prev.getResponseDataAsString();
if(resp!=null){
	log.info("response = "+resp);
	XXXXAuth Auth = new XXXXAuth(new ByteArray(${TransKey}).getBytes(),resp,${PFRSAPubKey},null);
	int result=Auth.verify();
	if(result==0){
		log.info("verify success"+Auth.getClear());
	}
	else{
		log.info("verify failed, result = "+result);
	}
}

这里需要指出的是,

(1)prev,用于获取HTTP Response数据。

(2)log用于输出日志。

两者皆为JMETER内部变量,可在脚本中直接使用。

创建View Results Tree

选择TestPlan或ThreadGroup->右键->add->Listener->ViewResults Tress

View Results Tree用于查看,每次请求的发送报文和响应报文。

例如,我们发送了两次请求,可依次点击查看各自的Request和Response。

创建Summary Report

选择TestPlan或ThreadGroup->右键->add->Listener->SummaryReport。

Summary Report用于查看,所有请求的成功率,响应时间,平均时间等。时间单位皆为ms

启动要测试的Springboot服务,运行JMeter Test Plan

在所有Response接收完毕后,测试将自动停止。

在运行过程中,JMeter会在右上角显示运行时间,剩余未接收到的Response数量。

若有失败请求,将会显示黄色三角形叹号。点击后,会跳转至LOG窗口。


测试完毕后,可点击Summary Report或View Results Tree查看相应结果。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值