Jmeter异步请求-事物控制器和While Controller的用法

背景:对异步请求进行一个简单的压测,那就需要对异步请求多次查询,然后根据查询结果进行其他的数据请求.这里还有一个问题就是,我们的请求数据需要加密,返回数据也是密文,需要解密.

解决思路:

1.请求数据需要加密请求,那就需要添加前置处理器Bean Shell PreProcessor,进行加密处理请求;

2.异步请求需要多次查询,既然要性能,那就需要统计多次查询的时间,所以将查询放到一个逻辑控制器中-事物控制器,然后勾选 Include duration of timer ....,即相当于用户进行一系列操作的测试时间,只有整个事务控制器定义的事务成功,才算成功。

3.根据定时器设置的时间,需要对异步请求多次查询,直到状态变化然后进行下面的操作,所以需要用到逻辑控制器中-While Controller,然后加一个定时器-固定定时器;

4.响应数据需要解密并显示在查看结果树中,需要给请求加一个后置处理器-Bean Shell PostProcessor,并将解密后的结果设置为jmeter全局内置变量,这样结果树中显示的结果就正确了.但是,后置处理器我这里没有起作用,后来用Sampler-BeanShell Sampler实现了.

=========================================================================

解决思路就是这样,然后就是具体的操作步骤了:

PS:解决思路和操作步骤序号对应

1.

import 自己jar包的类名;
import com.alibaba.fastjson.JSONObject; 

JSONObject map = new JSONObject();
map.put("userId", "test123");
//根据密钥加密过程
String data = RSAUtil.enStr(map.toJSONString(), "${privateKey}");
//将加密后的数据保存在临时变量中,以便在请求时通过${data}获取
vars.put("data", URLEncoder.encode(data, "utf-8"));

2.

.

3

.

4.

4.1 解密操作并设置jmeter的全部变量显示在结果树中

import 自己的jar包类路径.*;
//获取jmeter内置对象的响应结果
String responseResult=prev.getResponseDataAsString();
//根据密钥解密响应结果
String chargeResult=RSAUtil.deStr(responseResult,"${privateKey}");
//将解密响应结果设置给jmeter的内置对象
prev.setResponseData(chargeResult);

4.2 从解密结果中获取异步请求的查询状态

import 自己jar包的类路径.*;
import com.alibaba.fastjson.*;

prev.setResponseData(RSAUtil.deStr(prev.getResponseDataAsString(),"${privateKey}"));
//保存解密后的响应结果,需要get取一下,然后后面就直接操作enResult这个变量
vars.put("enResult",prev.getResponseDataAsString());
JSONObject map = new JSONObject();
String c=vars.get("enResult");
//获取轮训结果
JSONObject jobj = JSON.parseObject(c);
//从返回结果json中获取结果
resultStatus = (String) jobj.getJSONObject("data").get("resultStatus");
//根据轮训不同的状态,设置While Controller的条件.
if (resultStatus.equals("01")) {
vars.put("resultStatus","false");}
if (resultStatus.equals("02")) {
vars.put("resultStatus","false");
} if (resultStatus.equals("00")) {
vars.put("resultStatus","ture");}

至此4个接口就完毕了,总体的架构如下

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值