Jmeter_Beanshell  返回值中提取参数值
【准备环境】:
  ①Jmeter版本:5.1,JDK:1.8
  ②前置条件:将json.jar包置于..\apache-jmeter-5.1\lib\下,并将该jar包添加到测试计划的Library中;否则会报:Typed variable declaration : Class: JSONObject not found in namespace的错误;
  ③处理器:Beanshell处理器,import      org.json.*;(一般习惯使用到什么import什么,如:import     org.json.JSONObject、import org.json.JSONAarry;)

【思路】
  ①获取请求的返回值,即Json响应;
        String response_data = prev.getResponseDataAsString();      //注意此处获取到的是String类型;
  ②利用上一步获取的字符串形式的JSON,结合Java处理Json的方法,将需要的键值提取出来;
      需要利用JSONObject或者JSONArray构造JSON对象。
      JSONObject JsonData = new JSONObject(StrData);
  ③替换某些需要变更的字段值,再将新的JSON处理为Jmeter的参数,用于下一个请求的参数化值;
      JsonData.put("status", "CLOSED");
      String NewData = JsonData.toString();
      vars.put("NewStrData",NewData);

【示例1-----JSONObject对象】
  ①获取到JSON对象,需要提取其中的userid值;

【示例2-----JSONArray对象】

  ①需要提取返回值中,每一个对象数组中的每一个 uuid 及 id 的键值:获取JSON对象,再提取data数组内容并获取data数组长度,最后循环提取每一个 uuid 及 id 的键值;备注:1个客服同时与10个客户聊天,在聊天开始之前,需要捞取到这10个客户的uuid(uuid)及conversationId(id);

代码如下

 import org.json.JSONObject;
import org.json.JSONArray; /*
* 本脚本实现,jmeter从返回值中提取值,并传给参数
* 返回是json
* 返回是Array
*/ /*返回数据--参考如下
{"pub":{"status":0,"userId":"","apiVersion":"3.9.2.3061","subPline":"","clientAgent":"svnVer_1909111613","channelCode":"Google","appCode":"f002","model":"ALP-AL00","imsi":"dz_1567753187746","imei":"dz_1567753187746","screen":"720x1206","os":"android28","pname":"com.ishugui","apn":"wifi","ip":"192.168.150.212","province":"北京市","city":"北京"},"pri":{"f7":{"data":[{"color_pressed":"706ec5","tab":"shelf","color":"","icon_normal":"http://obzf2cyui.bkt.clouddn.com/1532939283635邀请1.png","icon_pressed":"http://obzf2cyui.bkt.clouddn.com/1532939283843邀请1.png","title":"书架"},{"color_pressed":"706ec5","tab":"store","color":"","icon_normal":"http://obzf2cyui.bkt.clouddn.com/1532939325789分享赠送1.png","icon_pressed":"http://obzf2cyui.bkt.clouddn.com/1532939325962分享赠送1.png","title":"书城"},{"color_pressed":"706ec5","tab":"discover","color":"","icon_normal":"http://obzf2cyui.bkt.clouddn.com/1532939356992任务1.png","icon_pressed":"http://obzf2cyui.bkt.clouddn.com/1532939357142任务1.png","title":"发现"},{"color_pressed":"706ec5","tab":"sort","color":"","icon_normal":"http://obzf2cyui.bkt.clouddn.com/1532939424772活动1.png","icon_pressed":"http://obzf2cyui.bkt.clouddn.com/1532939424922活动1.png","title":"分类"},{"color_pressed":"706ec5","tab":"personal","color":"","icon_normal":"http://obzf2cyui.bkt.clouddn.com/1532939389362热门1.png","icon_pressed":"http://obzf2cyui.bkt.clouddn.com/1532939389518热门1.png","title":"我的"}],"default_enter":"shelf","default_out":"shelf","status":0},"f9":{"status":1},"f10":{"showType":1,"status":0,"limitChapterShow":8,"everyFewPages":3},"f11":{"isListening":0,"status":1},"f1":{"reloadNumM":"","reloadNumS":"","user_avater":"","pirceUnit":"看点","remainSum":"","channelFee":"Google","userId":"","status":0},"f2":{"isNewVersion":"","status":0},"f3":{"vip_channel_id":45,"signin_tip":"任务送好礼","infoFlowUrl":"http://oethdsqcd.bkt.clouddn.com/8/8/found.html?t=1533092799617","agreementUrl":"http://bookstore.kzread.cn/protocol/agreement.html","signin_vipurl":"/php/vipsign","is_super_vip":"","vip_action_title":"立即开通","levelNo":"Lv1","comment_sum":"","awardStatus":0,"free_url":"http://oethdsqcd.bkt.clouddn.com/8/free.html?t=1533092812703","awardCenterUrl":"http://192.168.0.20:3080/php/user/awardcenter","read_num":"","urls":{"storeurl_girl":"http://oethdsqcd.bkt.clouddn.com/8/girl_index5.html?t=1533092824547","storeurl_default":"http://oethdsqcd.bkt.clouddn.com/8/index.html?t=1533092804426","storeurl_boy":"http://oethdsqcd.bkt.clouddn.com/8/boy_index4.html?t=1533092814971"},"isOpenSign":"","appPayWay":2,"isRechargeSucLogin":0,"h_wdmsg":0,"page_style":2,"comment_login":"","unsignin_tip":"签到领现金","user_avater":"","loginList":[{"appid":"","type":3,"key":"SINA"},{"appid":"PHONE_NUM_VERIFY","type":5,"key":"PHONE_NUM_VERIFY"},{"appid":"wx2d567f33ab16a8b8","type":1,"key":"WECHAT"},{"appid":"","type":2,"key":"QQ"}],"is_vip":"","vip_title":"VIP会员","ip":"","levelName":"草民","my_vip_url":"http://103.121.164.211:23080/php/vip/viphome_latest/","isInitTinker":"","signin_url":"/asg/portal/sign/signlist.do","featuredUrl":"http://oethdsqcd.bkt.clouddn.com/8/index.html?t=1533092804426","afu":0,"inu":true,"isSignTody":1,"show_type":2,"secretUrl":"http://bookstore.kzread.cn/protocol/privacy_policy.html","has_coupon":1,"rechargetip":"充值赠送的代金券存在有效期,有效期为:自领取时间起,15天有效;消费时优先扣除赠送代金券。","classifyUrl":"http://oethdsqcd.bkt.clouddn.com/8/classify.html?t=1533092820649","vip_sub_title":"免费书库/全场8折/每月礼包","reading_recom_num":"","status":0},"f4":{"loginQQAward":15,"loginCmccAward":2,"loginFacebookAward":30,"loginSinaAward":11,"appraisalAmount":"","dzTicketAmount":"0.66代金券","loginPhoneAward":23,"loginOppoAward":0,"loginGoogleAward":30,"ownAmount":"66看点","loginWxAward":20,"doTaskAmount":"","status":0},"f5":{"czip":"","lastModify":"","downloadUrls":"","status":0}}}
*/ //获取上一个请求的返回
code=prev.getResponseCode();
//打印信息
log.info("code==="+code); //1.获取请求返回值,此处值获得String类型
String response = prev.getResponseDataAsString();
//2.将string类型的返回值转换为jsond对象
JSONObject responseJson = new JSONObject(response);
//3.获取返回值中的pub数据,string类型
String strdata = responseJson.get("pub").toString(); //打印信息
log.info("response======="+response);
log.info("responseJson======="+responseJson);
log.info("strdata======="+strdata); //将4.获取到的pub字符串转为json对象
JSONObject JsonData=new JSONObject(strdata);
log.info("JsonData======="+JsonData); //5.pub中添加先的数据
JsonData.put("message","成功返回");
log.info("JsonData======="+JsonData); //6.将json对象保存为string类型,Jmeter中的请求的参数均以字符串的形式传递;
String NewData=JsonData.toString();
//7.将string类型的数据,存放到变量NewStrData,其他的请求可以引用${NewStrData}
vars.put("NewStrData",NewData);
//打印变量
log.info("NewStrData==="+NewData); //8.获取pub.userId
String id = responseJson.get("pub").get("userId").toString();
//9.把值保存到jmeter变量myid中,引用${myid}
vars.put("myid",id);
//10.用get取myid值
String getId=vars.get("myid");
log.info("取到的myid===="+getId); //11.获取数组pri.f7.data
JSONArray dataAarray = responseJson.get("pri").get("f7").getJSONArray("data"); //data为数组
log.info("提取数组===="+dataAarray);
//len数组长度
int len=dataAarray.length();
String strlen = Integer.toString(len);
vars.put("MessageNum",strlen);
log.info("数组长度 strlen===="+strlen); //循环取值
int i=0;
for(i=0;i<len;i++){
//获取data[i] 数组对象
JSONObject jsonTemp=(JSONObject)dataAarray.getJSONObject(i);
log.info("jsonTemp======="+jsonTemp);
//log.info("i----------"+i); //log.info("jsonTemp======="+jsonTemp.get("title"));
//log.info("jsonTemp======="+jsonTemp.get("title").toString()); //提取title
title = jsonTemp.getString("title");
//打印
log.info("title===="+title);
//存储变量
vars.put("title_"+i, jsonTemp.getString("title"));
//get 变量值
String getTitle=vars.get("title_"+i);
log.info("取到的title_"+i+" : "+getTitle);
}

原文:https://www.cnblogs.com/xpp142857/p/7374281.html

Jmeter_Beanshell 返回值中提取参数值的更多相关文章

  1. 返回数据中提取数据的方法(JSON数据取其中某一个值的方法)

    返回数据中提取数据的方法 比如下面的案例是,取店铺名称 接口返回数据如下: {"Code":0,"Msg":"ok","Data& ...

  2. 关于readdir返回值中struct dirent.d_type的取值有关问题(转)

    关于readdir返回值中struct dirent.d_type的取值问题 原网页链接 http://www.gnu.org/software/libc/manual/html_node/Direc ...

  3. void * 和 void 在函数返回值中的区别

    一个很容易糊涂的问题. 在函数的返回值中, void 是没有任何返回值, 而 void * 是返回任意类型的值的指针. 还是看代码吧: #include <stdlib.h> #inclu ...

  4. C#获取存储过程返回值和输出参数值的方法

    //转自网络,先留个底 1.获取Return返回值 //存储过程 //Create PROCEDURE MYSQL // @a int, // @b int //AS // return @a + @ ...

  5. 接口返回值中数组中包含多个json对象形式

    返回数据Json: { "code": , "msg": "成功", "departmentlist": [ { &qu ...

  6. python3返回值中的none

    浏览器返回null,python3返回none,懵了. google了很多资料,不明就里,这就是没基础的后果啊呀呀呀. 上阮一峰的截图,就这么理解下凑合吧:

  7. java @ResponseBody返回值中去掉NULL字段

    需要同时添加两个位置: 1.annotation-driven过滤 <mvc:annotation-driven> <mvc:message-converters register- ...

  8. js遍历ajax回调函数返回值中的object对象

    function printObject(obj) {      //obj = {"cid":"C0","ctext":"区县& ...

  9. go中defer的理解--defer、return、返回值之间执行顺序

    defer可以读取有名返回值 func c() (i int) { defer func() { i++ }() return 1 } 输出结果是2. 在开头的时候,我们知道defer是在return ...

随机推荐

  1. 【转】 Linux 命令解释(Linux基础二)

    前言 对服务器来讲,图形界面会占用更多的系统资源,而且会安装更多的服务.开放更多的端口,这对服务器的稳定性和安全性都有负面影响.其实,服务器是一个连显示器都没有的家伙,要图形界面干十么? 说到这里,有 ...

  2. 杂项:电子表格程序-u

    ylbtech-杂项:电子表格程序-u 1.返回顶部 1.1 https://www.gemboxsoftware.com/spreadsheet 1.1 https://www.spreadshee ...

  3. 115、TensorFlow变量的使用

    # To use the value of a tf.Variable in a Tesnorflow graph , simply treat it like a normal tf.Tensor ...

  4. delphi vlc 安装bug 处理编译错误"0" is an invalid value for the "DebugInformation" parameter of the "DCC"

    处理编译错误"0" is an invalid value for the "DebugInformation" parameter of the "DCC" [摘要:http://blog.csdn ...

  5. zabbix4.0部署

    1.环境检查 uname -r getenforce systemctl status firewalld.service 2.设置解析,自建yum源(可选) /etc/hosts #!/bin/ba ...

  6. Could not resolve placeholder'XXX' in string value "XXXX"

    练习SSM项目的demo中遇到一个问题,我在applicationContext.xml中使用了<context:property-placeholder location="clas ...

  7. appium常见问题09_MAC打开uiautimatorviewer闪退怎么办?

    问题: 下载安装Android SDK后,并且已在.bash_profile文件中配置环境变量.但是在tools中打开定位工具uiautomatorviewer出现闪退. 解决: 首先检查环境变量配置 ...

  8. 方法Join()

    等待线程结束:jion() 谦让: yeild() 睡眠: sleep() jion和sleep和yeild之间有什么区别呢? 首先介绍一下jion(): 如果想让主线程等待子线程执行完毕之后再继续运 ...

  9. QTP场景恢复函数

    public Function RecoveryFunction1(Object, Method, Arguments, retVal) Dim FileName ,TimeNow, ResPath ...

  10. Can't connect to local MySQL server through socket '/opt/lampp/var/mysql/mysql.sock' (2)

    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/opt/lampp/var/mysql/mysql.s ...