BeanShell使用json.jar包处理Json数据
環(huán)境準(zhǔn)備
①Jmeter版本 ,JDK?
②前置條件:將json.jar包置于..\lib\下,
如果還是報(bào)錯(cuò),可以將該jar包添加到測(cè)試計(jì)劃的Library中;否則會(huì)報(bào):Typed variable declaration : Class: JSONObject not found in namespace的錯(cuò)誤;
③處理器:Beanshell處理器,import org.json.*;
也可以 import org.json.JSONObject;、import org.json.JSONAarry;主要是處理這兩種類型的數(shù)據(jù),Json對(duì)象和Json數(shù)組
eg:例子來源于https://blog.csdn.net/weixin_42204641/article/details/82850659
JSONObject:{"name":"tom"}、{"name":["tome","kate"]}
// 先設(shè)置1個(gè)JSONObject、一個(gè)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"}]
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"}]
主流思想
1.獲取response返回的數(shù)據(jù)(返回值)
String response_data = prev.getResponseDataAsString();?//自定義一個(gè)變量response_data,來獲取請(qǐng)求的返回值String
2.利用上一步獲取的字符串形式的JSON,結(jié)合Java處理Json的方法,將需要的鍵值提取出來;
JSONObject response =??new JSONObject(response_data); //自定義一個(gè)對(duì)象response,將返回值構(gòu)造JSON對(duì)象
這里構(gòu)造的是JSONObject(對(duì)象JSON)也可以自己構(gòu)造JSONAarry(數(shù)組對(duì)象)方法是一樣的 JSONArray jsona = new JSONArray();
3.獲取需要拿到的數(shù)據(jù)
String total_metaData = response.get("data").get("pageMetaData").get("totalSize").toString();? ?//.get("data").get("pageMetaData")
? 4.設(shè)置為Jmeter中的全局變量,供后續(xù)使用
vars.put("total_meta",total_metaData); //這里設(shè)置的全局變量,在本腳本中無效--${total_meta}是錯(cuò)誤的
【示例1-----JSONObject對(duì)象】
①獲取到JSON對(duì)象,需要提取其中的data對(duì)象,并更換“issueHandleType”字段的值為“CLOSE”,再構(gòu)造成參數(shù)字符串;
?
A請(qǐng)求后添加BeanShell后置處理器,代碼如下:
import org.json.*;String response_data = prev.getResponseDataAsString(); //獲取請(qǐng)求返回值。注意此處只能獲取到String類型; log.info(response_data);JSONObject data_obj = new JSONObject(response_data); //將String類型的返回值構(gòu)造成JSONObject對(duì)象,才可使用Java對(duì)象的方法對(duì)其進(jìn)行操作; String StrData = data_obj.get("data").toString(); //獲取作為下一個(gè)請(qǐng)求post的參數(shù)值data; log.info(StrData); //Log中顯示的字段順序會(huì)與“response_data”中的字段順序有差異,JSON串的正確與否無關(guān)字段順序; JSONObject JsonData = new JSONObject(StrData); //將獲取到的“data”字符串構(gòu)造成JSON對(duì)象; JsonData.put("issueHandleType", "CLOSE"); //更新issueHandleType的json值; JsonData.put("solution", "2017_解決方案_性能測(cè)試"); 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對(duì)象保存為String類型,Jmeter中的請(qǐng)求的參數(shù)均以字符串的形式傳遞; vars.put("NewStrData",NewData); log.info(NewData);
【示例2-----JSONArray對(duì)象】
需要提取返回值中,每一個(gè)對(duì)象數(shù)組中的每一個(gè) uuid 及 id 的鍵值:獲取JSON對(duì)象,再提取data數(shù)組內(nèi)容并獲取data數(shù)組長度,最后循環(huán)提取每一個(gè) uuid 及 id 的鍵值;備注:1個(gè)客服同時(shí)與10個(gè)客戶聊天,在聊天開始之前,需要撈取到這10個(gè)客戶的uuid(uuid)及conversationId(id);
//import org.json.*;
import org.json.JSONObject; import org.json.JSONArray;try {String response_data = prev.getResponseDataAsString(); //獲取請(qǐng)求返回值。注意此處只能獲取到String類型;JSONObject data_obj = new JSONObject(response_data); //將String類型的返回值構(gòu)造成JSONObject對(duì)象; JSONArray data_array = data_obj.getJSONArray("data"); //data為數(shù)組int len = data_array.length(); //獲取data數(shù)組的長度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 ] 數(shù)組對(duì)象;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; }
?
轉(zhuǎn)載于:https://www.cnblogs.com/nieliangcai/p/10535194.html
總結(jié)
以上是生活随笔為你收集整理的BeanShell使用json.jar包处理Json数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: silk mask面膜多少钱
- 下一篇: [SDOI2017]天才黑客