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

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

      不要急,接下來,讓咱們見證奇蹟是如何誕生的!!!json

  可能有人在網上看到不少關於解析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中)函數

  

 

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

 

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

第二步:咱們要獲取到這些數據,來一個接口請求,獲取一下數據,而後在接口請求下加一個後置處理器BeanShell PostProcessor。話很少說,代碼擼起來!(接口大家本身搞一個,我就不貼了)spa

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

//日誌打印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); 這樣完美解決。

相關文章
相關標籤/搜索