Jmeter性能测试一

利用Jmeter进行性能测试

背景

利用Jmeter进行API性能测试是现在的一个主要方式,记录一下我遇到的例子。同时再记录一点,Jmeter GUI主要用来创建和Debug脚本,需要用命令行模式进行压力测试,测试命令如下:jmeter -n -t test.jmx -l result/result.jtl -e -o testplan/webreport -j logs。

安装

现在Jmeter官网上最新的版本是5.2,但是我在一个测试中,遇到API需要值一个md5值,但是我发现5.2版本不支持md5方式,所以后来用的4.0版本。

使用示例

1. Token Header
用户名和密码生成一个特定的token, 该token需要给其他几个API做为header。

1)首先是获得返回体中的token放到参数中,对返回体值的抓取,网上大多是按正则表达式提取值,但是正式表达式真的好难,后来在Post Processors中有一个JSON Extractor完美的解决了这个问题;

返回体
Jmeter性能测试一_第1张图片
JSON Extractor设置
Jmeter性能测试一_第2张图片
2) 当前token参数只能仅限于当前线程组,我们需要在BeanShell PostProcessor中将这个设置成全局变量,方便其他线程组使用;

${__setProperty(token_header,${token})}

3)我们在当前Test Plan下增加一个全局的header manager, 将token设置为全局变量${__P(token_header)};
Jmeter性能测试一_第3张图片
2. 创建和获取唯一ID
对于Post API进行增加操作,经常有一些唯一性校验,例如要求唯一电话号码。进行唯一性增加比较容易,但是经常我们需要对增加的记录进行查询,这就要求我们记录下创建的ID。
解决方案是这样的,我们根据token生成的那一刻记下时间戳,用该时间戳为起点,进行自增,这样按照顺序执行,创建,查询,就能保证我们不管是创建还是查询都是从同一值开始,同时该值又是变化的,保证唯一性。

1)设置token变量的同时,将当前时间戳设置成初始值,注意尽量以10位时间戳开始,不要用13位值;

${__setProperty(mobile_init,${__time(/1000,)} )};

Jmeter性能测试一_第4张图片
2) 利用counter对于mobile进行自增;
Jmeter性能测试一_第5张图片
3) 在每一个Http Request里增加BeanShell PreProcessor,对请求体进行参数传值;
Jmeter性能测试一_第6张图片
4) 设置请求体;

{
 "mobile": "${mobile}",
 "unionid": "${unionid}",
}

结合上两个case的脚本结构如下 :
Jmeter性能测试一_第7张图片

3. MD5值传参
根据一些特定的API,需要传入MD5值。解决方案是我们在jmeter安装文件,lib\ext目录下保存md5和MD5Util jar包。

在BeanShell PreProcessor中加入以下代码,传入md5值:

import md5.Md5sec;
Md5sec md = new Md5sec();
String key = "se1";
String brand_name="lod";
String guid=vars.get("guid");
String str = brand_name+guid+key;
vars.put("brand_name",(brand_name));
vars.put("guid",(guid));
vars.put("sin",md.MD5(str));

你可能感兴趣的:(Jmeter性能测试一)