Jmeter_Beanshell 返回值中提取參數值


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);

 

 

 

 

代碼如下

 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM