BeanShell使用json.jar包處理Json數據

環境準備shell

  ①Jmeter版本 ,JDK json

  ②前置條件:將json.jar包置於..\lib\下,數組

      若是仍是報錯,能夠將該jar包添加到測試計劃的Library中;不然會報:Typed variable declaration : Class: JSONObject not found in namespace的錯誤;post

  ③處理器:Beanshell處理器,import org.json.*;  性能

      也能夠 import org.json.JSONObject;、import org.json.JSONAarry;主要是處理這兩種類型的數據,Json對象和Json數組測試

eg:例子來源於https://blog.csdn.net/weixin_42204641/article/details/82850659ui

 JSONObject:{"name":"tom"}、{"name":["tome","kate"]}            spa

// 先設置1個JSONObject、一個JSONArray  
JSONObject jsono = new JSONObject();
JSONArray  jsona = new JSONArray();

//JSONArray傳值
jsona.put("tom");
jsona.put("kate");//["tom","kate"]

//JSONObject傳值
jsono.put("name",jsona);//{"name":["tom","kate"]}

   JSONAarry:[{"name":"tom"},{"name":"kate"}].net

JSONArray jsona = new JSONArray();

JSONObject jsono1 = new JOSNObject();

JSONObject jsono2 = new JSONObject();

jsono1.put("name","tom");//{"name":"tom"}
jsono2.put("name","kate");//{"name":"kate"}

jsona.put(json1,json2);//[{"name":"tom"},{"name":"tom"}]

主流思想code

  1.獲取response返回的數據(返回值)    

    String response_data = prev.getResponseDataAsString(); //自定義一個變量response_data,來獲取請求的返回值String

  2.利用上一步獲取的字符串形式的JSON,結合Java處理Json的方法,將須要的鍵值提取出來;

    JSONObject response =  new JSONObject(response_data); //自定義一個對象response,將返回值構造JSON對象

    這裏構造的是JSONObject(對象JSON)也能夠本身構造JSONAarry(數組對象)方法是同樣的  JSONArray jsona = new JSONArray();

  3.獲取須要拿到的數據

    String total_metaData = response.get("data").get("pageMetaData").get("totalSize").toString();   //.get("data").get("pageMetaData")

   4.設置爲Jmeter中的全局變量,供後續使用

    vars.put("total_meta",total_metaData);      //這裏設置的全局變量,在本腳本中無效--${total_meta}是錯誤的

【示例1-----JSONObject對象】

  ①獲取到JSON對象,須要提取其中的data對象,並更換「issueHandleType」字段的值爲「CLOSE」,再構形成參數字符串;

 

  A請求後添加BeanShell後置處理器,代碼以下:

import org.json.*;

String response_data = prev.getResponseDataAsString(); //獲取請求返回值。注意此處只能獲取到String類型;
log.info(response_data);

JSONObject data_obj = new JSONObject(response_data); //將String類型的返回值構形成JSONObject對象,纔可以使用Java對象的方法對其進行操做;

String StrData = data_obj.get("data").toString(); //獲取做爲下一個請求post的參數值data;
log.info(StrData); //Log中顯示的字段順序會與「response_data」中的字段順序有差別,JSON串的正確與否無關字段順序;

JSONObject JsonData = new JSONObject(StrData); //將獲取到的「data」字符串構形成JSON對象;

JsonData.put("issueHandleType", "CLOSE"); //更新issueHandleType的json值;
JsonData.put("solution", "2017_解決方案_性能測試");
JsonData.put("status", "CLOSED");
JsonData.put("handleType", "CLOSE");
JsonData.put("complaintTypeSecondCode", "URGE"); //異常類型;
JsonData.put("complaintTypeSecondName", "催件"); 
JsonData.put("lastUpdateTime", "${timestamp}");
JsonData.put("lastUpdator", "${UserName}");
JsonData.put("lastUpdatorName", "${UserName}");

String NewData = JsonData.toString(); //將JSON對象保存爲String類型,Jmeter中的請求的參數均以字符串的形式傳遞; 
vars.put("NewStrData",NewData);
log.info(NewData);

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

  須要提取返回值中,每個對象數組中的每個 uuid 及 id 的鍵值:獲取JSON對象,再提取data數組內容並獲取data數組長度,最後循環提取每個 uuid 及 id 的鍵值;備註:1個客服同時與10個客戶聊天,在聊天開始以前,須要撈取到這10個客戶的uuid(uuid)及conversationId(id);

//import org.json.*;
import
org.json.JSONObject; import org.json.JSONArray; try { String response_data = prev.getResponseDataAsString(); //獲取請求返回值。注意此處只能獲取到String類型; JSONObject data_obj = new JSONObject(response_data); //將String類型的返回值構形成JSONObject對象; JSONArray data_array = data_obj.getJSONArray("data"); //data爲數組 int len = data_array.length(); //獲取data數組的長度 String strlen = Integer.toString(len); vars.put("MessageNum",strlen); //log.info(strlen); int i = 0; for(;i < len;++i) { JSONObject jsonTemp = (JSONObject)data_array.getJSONObject(i); //獲取 data[ i ] 數組對象; switch(i) { case 0: vars.put("uuid_1", jsonTemp.getString("uuid")); vars.put("conversationId_1", jsonTemp.getString("id")); break; case 1: vars.put("uuid_2", jsonTemp.getString("uuid")); vars.put("conversationId_2", jsonTemp.getString("id")); break; //..................................此處省去7次處理 case 10: vars.put("uuid_11", jsonTemp.getString("uuid")); vars.put("conversationId_11", jsonTemp.getString("id")); break; default: break; } } } catch (Throwable ex) { log.error("Failed in Beanshell", ex); throw ex; }
相關文章
相關標籤/搜索