zoukankan      html  css  js  c++  java
  • Jmeter_Beanshell 返回值中提取参数值

    Jmeter_Beanshell  返回值中提取参数值
    【准备环境】:
      ①Jmeter版本:5.1,JDK:1.8
      ②前置条件:将json.jar包置于..apache-jmeter-5.1lib下,并将该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);

     

    代码如下

     1 import org.json.JSONObject;
     2 import org.json.JSONArray;
     3 
     4 /*
     5  * 本脚本实现,jmeter从返回值中提取值,并传给参数
     6  * 返回是json
     7  * 返回是Array
     8 */
     9 
    10 
    11 /*返回数据--参考如下
    12 {"pub":{"status":0,"userId":"7015","apiVersion":"3.9.2.3061","subPline":"2","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":"868686","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":"868686","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":"868686","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":"868686","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":"868686","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":"1","reloadNumS":"10","user_avater":"","pirceUnit":"看点","remainSum":"0","channelFee":"Google","userId":"7015","status":0},"f2":{"isNewVersion":"1","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":"0","vip_action_title":"立即开通","levelNo":"Lv1","comment_sum":"0","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":"0","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":"1","appPayWay":2,"isRechargeSucLogin":0,"h_wdmsg":0,"page_style":2,"comment_login":"0","unsignin_tip":"签到领现金","user_avater":"","loginList":[{"appid":"1630884126","type":3,"key":"SINA"},{"appid":"PHONE_NUM_VERIFY","type":5,"key":"PHONE_NUM_VERIFY"},{"appid":"wx2d567f33ab16a8b8","type":1,"key":"WECHAT"},{"appid":"101366226","type":2,"key":"QQ"}],"is_vip":"0","vip_title":"VIP会员","ip":"","levelName":"草民","my_vip_url":"http://103.121.164.211:23080/php/vip/viphome_latest/","isInitTinker":"1","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":"5","status":0},"f4":{"loginQQAward":15,"loginCmccAward":2,"loginFacebookAward":30,"loginSinaAward":11,"appraisalAmount":"17","dzTicketAmount":"0.66代金券","loginPhoneAward":23,"loginOppoAward":0,"loginGoogleAward":30,"ownAmount":"66看点","loginWxAward":20,"doTaskAmount":"16","status":0},"f5":{"czip":"","lastModify":"","downloadUrls":"","status":0}}}
    13 */
    14 
    15 //获取上一个请求的返回
    16 code=prev.getResponseCode();
    17 //打印信息
    18 log.info("code==="+code);
    19 
    20 //1.获取请求返回值,此处值获得String类型
    21 String response = prev.getResponseDataAsString();
    22 //2.将string类型的返回值转换为jsond对象
    23 JSONObject responseJson = new JSONObject(response);
    24 //3.获取返回值中的pub数据,string类型
    25 String strdata = responseJson.get("pub").toString();
    26 
    27 //打印信息
    28 log.info("response======="+response);
    29 log.info("responseJson======="+responseJson);
    30 log.info("strdata======="+strdata);
    31 
    32 //将4.获取到的pub字符串转为json对象
    33 JSONObject JsonData=new JSONObject(strdata);
    34 log.info("JsonData======="+JsonData);
    35 
    36 
    37 //5.pub中添加先的数据
    38 JsonData.put("message","成功返回");
    39 log.info("JsonData======="+JsonData);
    40 
    41 //6.将json对象保存为string类型,Jmeter中的请求的参数均以字符串的形式传递; 
    42 String NewData=JsonData.toString();
    43 //7.将string类型的数据,存放到变量NewStrData,其他的请求可以引用${NewStrData}
    44 vars.put("NewStrData",NewData);
    45 //打印变量
    46 log.info("NewStrData==="+NewData);
    47 
    48 //8.获取pub.userId
    49 String id = responseJson.get("pub").get("userId").toString();
    50 //9.把值保存到jmeter变量myid中,引用${myid}
    51 vars.put("myid",id);
    52 //10.用get取myid值
    53 String getId=vars.get("myid");
    54 log.info("取到的myid===="+getId);
    55 
    56 //11.获取数组pri.f7.data
    57 JSONArray dataAarray = responseJson.get("pri").get("f7").getJSONArray("data");   //data为数组
    58 log.info("提取数组===="+dataAarray);
    59 //len数组长度
    60 int len=dataAarray.length();
    61 String strlen = Integer.toString(len);
    62 vars.put("MessageNum",strlen);
    63 log.info("数组长度 strlen===="+strlen);
    64 
    65 //循环取值
    66 int i=0;
    67 for(i=0;i<len;i++){
    68     //获取data[i] 数组对象
    69     JSONObject jsonTemp=(JSONObject)dataAarray.getJSONObject(i);
    70     log.info("jsonTemp======="+jsonTemp);
    71     //log.info("i----------"+i);
    72     
    73     //log.info("jsonTemp======="+jsonTemp.get("title"));
    74     //log.info("jsonTemp======="+jsonTemp.get("title").toString());
    75     
    76     //提取title
    77     title = jsonTemp.getString("title");
    78     //打印
    79     log.info("title===="+title);
    80     //存储变量
    81     vars.put("title_"+i, jsonTemp.getString("title"));
    82     //get 变量值
    83     String getTitle=vars.get("title_"+i);
    84     log.info("取到的title_"+i+" : "+getTitle);
    85     }

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

  • 相关阅读:
    c++ range库
    差分数组
    简单比较一下C++中的引用和指针
    数字图像处理中一张常用图片
    内存池与内存块
    SmartPtr
    Allocator
    Java学习第12天
    Java学习第11天
    Java学习第10天
  • 原文地址:https://www.cnblogs.com/lisa2016/p/11858591.html
Copyright © 2011-2022 走看看