【Jmeter】Beanshell處理提取出來的列表字符串轉數組對象


前段時間在使用JSON提取器提取接口返回值字段時,遇到個問題:該字段的值是一個列表(數組)字符串,也就是說不能按照Jsonpath的方式繼續往下提取字符串列表里面的值了,那么該怎么處理這種情況呢?

如下圖:要提取hierarchy字符串里面的某個objectId值

使用Json提取器只能提取到hierarchy整個字符串,無法繼續往下提取了,Json提取器結果如下

此時該怎么做呢?

解決思路:使用fastjson,將字符串列表轉為數組,然后按照數組提取需要的值,再將這個值存到變量中,這樣就可以在后續請求中使用了

實現步驟

1、根據使用的jmeter版本下載對應的fastjson.jar包,下載地址:https://mvnrepository.com/artifact/com.alibaba/fastjson

2、在jmeter包根路徑下新建個文件夾,暫時就叫 third 吧(表示三方下載的包),把下載的fastjson包放在這個目錄下,如下:

3、在測試計划下,添加這個jar包路徑

 

4、在提取到 hierarchy 字符串列表的請求下,添加Beanshell后置處理器,輸入以下代碼 

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONPath;
import java.util.List;

try {
    // 將提取到的hierarchy字符串存到變量data中
    String data = vars.get("hierarchy");
    log.info("-----------------------------" + data);
    // 將數組字符串轉成數組(注意:如果返回的是字典格式,此處則使用JSONObject來聲明變量,同時轉化的函數要使用JSON.parseObject,即JSONObject data_arr = JSON.parseObject(data))
    JSONArray data_arr = JSON.parseArray(data);
    log.info("-----------------------------" + data_arr);
    // 由於數組里面是字典,所以此處使用getJSONObject方法來獲取指定下標成員字典,然后調用get方法獲取字典中指定字段的值
    String item_type = data_arr.getJSONObject(0).get("name");
    log.info("-----------------------------" + item_type);
    // 將獲取到的值放到變量item_type中,這樣就可以使用${item_type}來調用變量了,注意:變量名必須要用""引起來
    vars.put("item_type", item_type)
}
catch (Throwable ex) {
    log.error("Beanshell failure: ", ex);
    throw ex;
}

執行結果如下:


免責聲明!

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



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