JMeter通过JSONExecutor对返回结果解析后,根据结果再执行循环请求的实现方案

JMeter通过JSONExecutor对返回结果解析后,根据结果再执行循环请求的实现方案

  • 在使用JMeter编写压力测试计划时,需求实现根据请求的返回结果(json或xml等结构化半结构化的结果都可以,只要可以通过代码解析即可),进行下一步的循环请求

参照 CSDN-存亡祸福,其要在身 博文【JMeter 实现获取 Response Json 转换为变量后循环查询

一、测试场景

  • 当前案例测试场景:
  1. 用户登录成功后,通过返回的根节点ID请求一级部门;
  2. 解析一级部门请求的返回结果中的二级部门ID集合;
  3. 循环二级部门ID集合,循环请求二级部门的下级;

二、一级部门请求

通过添加一个取样器,将登录成功的根节点ID(从全局变量中获取的)放入请求参数中

设置全局变量和如何使用全局变量可以参照另一个博文【JMeter全局变量在使用时有时会取到null的问题解决

在此就不展示具体的请求参数了

三、一级部门请求结果解析

  • 实现方式就是通过BeanShell取样器(BeanShellSampler),在请求取样器[一级部门请求]下,添加一个BeanShell Sampler,来解析返回结果;
  • 重点:要将二级部门ID集合中的每个元素存入变量中,形式为:变量名+索引下标,取的时候按变量名+循环控制变量值即可
  • 下面是BeanShell中的java代码,用于解析json结果,其中import net.sf.json. 是解析json需要引入的jar,将第三方的jar直接放到JMeter安装目录\lib\ext\目录下重启JMeter,并在测试计划中将此jar加入classpath中
    JMeter中引入第三方jar
    BeanShell脚本代码如下:
import net.sf.json.JSONObject;
import net.sf.json.JSONArray;
//获取请求返回值。注意此处只能获取到String类型;
String response_data = prev.getResponseDataAsString(); 
log.info("=================== response_data ===================");
log.info(response_data);
JSONObject data_obj = JSONObject.fromObject(response_data);
if (data_obj != null) {
	JSONObject body_obj = data_obj.getJSONObject("body");
	int departmentslen = 0;
	if (!body_obj.getJSONArray("departments").isEmpty()) {		
		JSONArray departments = body_obj.getJSONArray("departments");
		// https://blog.csdn.net/qq_27009225/article/details/112628385
		log.info("——————————————| departments:"+  departments + "|——————————————");
		//获取departments数组的长度
		departmentslen = departments.size();
		for(int i = 0; i < departmentslen; i++) {
			String departmentID = departments.getJSONObject(i).getString("departmentID").toString();
			log.info("——————————————| departmentID:"+departmentID+" |——————————————");		
			vars.put("departmentID"+i,departmentID);
		}
	}
	log.info("——————————————| departmentslen:"+departmentslen.toString()+" |——————————————");
	vars.put("departmentslen",departmentslen.toString());
}

BeanShell脚本代码解析

四、循环二级部门ID集合

4.1 添加逻辑控制器-Loop Controller

循环次数通过 二级部门 I D 集合元素数量变量名 ,本例中是 {二级部门ID集合元素数量变量名},本例中是 二级部门ID集合元素数量变量名,本例中是{departmentslen}
在这里插入图片描述

4.2 添加用户定义变量

右键 Add->Config Element->User Defined Variables
在这里插入图片描述

4.3 在循环内添加请求sampler

使用嵌套变量:${__V(外层变量${内层变量})}(i=0,departmentID=xxxxxx,组合后${__V(departmentID${i})}=xxxxxx0)

在这里插入图片描述

4.4 最后添加循环控制变量自增处理

通过添加BeanShell Sampler,在脚本对变量i实现自增

int a1 = Integer.valueOf(${i});
int i = a1+1;
vars.put("i",i.toString());
log.info("——————————————| i:"+i.toString()+" |——————————————");

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老杜095

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值