Jmeter4.0 _Beanshell解析並獲取json響應數據數組長度


       我們在做jmeter接口測試的時候,有時候碰到開發沒返回數據total,只返回了一條條記錄,可是呢,我們又需要知道到底返回了多少條數據時,咋辦呢?咋辦呢?咋辦呢?

      不要急,接下來,讓我們見證奇跡是如何誕生的!!!

  可能有人在網上看到很多關於解析json返回數據的文章,看來看去都是一樣的,於是乎,我親測了一下,果然沒用!!!(可能是本人技術太渣,無法領悟其中的真髓)沒辦法,只能看log信息一次次試咯!終於在各種大佬的幫助下搞好了!

第一步:將fastjson-1.2.62.jar包置於jmeter的lib目錄下,並將該jar包添加到測試計划的Library中;否則會報:Typed variable declaration : Class: JSONObject not found in namespace的錯誤(保險起見,再將fastjson-1.2.62.jar包同樣置於jmeter的lib/ext目錄下,同樣將該jar包添加到測試計划的Library中)

  

 

 我們再來看看要解析的數據格式

 

 我們要獲取到item數組長度,即item下有多少條數據。

第二步:我們要獲取到這些數據,來一個接口請求,獲取一下數據,然后在接口請求下加一個后置處理器BeanShell PostProcessor。話不多說,代碼擼起來!(接口你們自己搞一個,我就不貼了)

import com.alibaba.fastjson.*;

//獲取請求的返回值
String response_data = prev.getResponseDataAsString();
//日志打印獲取請求的返回值
log.info("==============response_data=="+response_data+"=========================");
//將String類型的返回值構造成JSONObject對象
JSONObject data_obj = JSON.parse(response_data);
//日志打印data_obj值
log.info("==============data_obj=="+data_obj+"=========================");

//將data轉成JSONObject類型
JSONObject jsonData = data_obj.getJSONObject("data");

//日志打印jsonData值
log.info("==============jsonData=="+jsonData+"=========================");

//獲取作為下一個請求post的參數值item(獲取字符串)
//String item = jsonData.get("item").toString();

//獲取作為下一個請求post的參數值item(獲取JSONArray)
JSONArray item = jsonData.getJSONArray("item");

log.info("==============item=="+item+"=========================");

//獲取item字符串的長度
//int len = item.length();

//獲取item數組的長度
int len = item.size();

String itemLen = Integer.toString(len);

log.info("==============itemLen=="+itemLen+"=========================");
vars.put("itemNum",itemLen);

 

把上面的代碼就這樣塞到BeanShell PostProcessor進去。各位觀眾,看到沒有,我幾乎是每一行一個Log,我太難了。

第三步:執行一下,運氣好的話就會看到jmeter日志里打印出以下的日志信息了

 

 順便說一下,代碼里最后一行vars.put("itemNum",itemLen);這個是塞一個itemNum變量到jmeter里,方便后面去調用。這樣一來,就獲取到我們想要的數據了。

 

划重點:BeanShell PostProcessor為啥有標紅的呢?因為網上很多的全是這樣寫的:JSONObject data_obj = new JSONObject(response_data); 結果我也這樣試了,理所當然我失敗了,報錯了,Can't find constructor: com.alibaba.fastjson.JSONObject( java.lang.String ) in class:,然后我去翻json源碼,一看就兩構造器:public JSONObject()和public JSONObject(boolean isNull),壓根兒就沒有public JSONObject(String text)這樣的構造函數,不報錯才怪勒!換個方法轉化JSONObject對象,找到了JSON.parse(String text); 這樣完美解決。

 

 

  

 


免責聲明!

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



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