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. handler消息机制入门

    handler消息机制入门 为什么要用handle? 我们在网络上读取图片信息时,是不能把耗时操作放在主线程里面的,当我们在子线程中获取到了图片的消息的时候,我们就需要把这个数据传给主线程. 而直接使 ...

  2. 关系型数据库MySQL(三)_触发器

    简介 用来给保证数据完整性的一种方法,经常用于加强数据的完整性: 是与表事件相关的特殊的存储过程,与存储过程的唯一区别是触发器不能执行execute语句调用,而是在用户执行SQL语句时自动触发执行 执 ...

  3. 《单词的减法》state1~state17(第三遍学习记录)

    2016.05.24 state 8 curse/curve dedication 多用于奉献和献身 disastrous disruptive distract state 9 domestic/d ...

  4. 用于拆解和组合PDF中各个对象的shell脚本

    拆解脚本 header_start=0 header_len=15 xref_start=$(strings -a -t d $1 | grep -e "\bxref\b" | a ...

  5. python外星人入侵(游戏开发)

    实现的项目要求: 1.外星人游戏添加飞船上下移动功能: 2.为游戏添加背景音乐: 3.在玩家得分.最高得分.玩家等级前添加"Score"."High Score" ...

  6. 基本数据类型和string类型的转换

    基本数据类型转string类型: 方式1:fmt.Sprintf("%参数", 表达式) [个人习惯这个,灵活] 函数的介绍: func Sprintf func Sprintf( ...

  7. Java_3.Java帮助文档

    1.Oracle的在线帮助文档 http://docs.oracle.com/javase/8/docs/api 2.jdk源码内容(包含5个部分) [以下内容参考至:https://blog.csd ...

  8. Centos,tomcat

    1.下载tomcat9.0,解压,配置 wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.21/bin/apa ...

  9. Linux系统入门---开机启动流程

    目录 Linux系统入门---开机启动流程 一.centos6 二.systemd管理进程 1.查看级别 三.centos7实践案例: 1.案例1:centos7系统,单用户修改root密码 案例2: ...

  10. awk 起始位置和长度和 mf 一致

    1位开始 , 925开始 截取24 awk '{OFS="";print(substr($0,925,24),substr($0,1,24),substr($0,436,1),&q ...