提取返回的json格式數據


返回的結果,提取token

{
    "code": 0, "msg": "login success!", "token": "234af73571da46ade79ea6a74961b1d23d609b79", "username": "test" }

方法一:json提取器,此提取器用於提取請求返回結果中的某個值或者某一組值,用法比正則表達式要簡單,標准寫法為$.key,其中key為返回結果map中的一個鍵,如果是多層則繼續用.key進行即可,如果遇到key的value值為一個List,則使用.key[n],其中n為list中元素的編號

    

 

    JSON提取器參數說明:

  • Names of created variables 參數名稱
  • JSON Path expressions 提取表達式
  • Match No.(0 for Random) 匹配規則,-1所有,0隨機,1第一個
  • Compute concatenation va 如果有匹配到多個值,選擇此項,會將全部值保存到_ALL,並使用逗號分割每個值,注意Match No. (0 for Random)需要為-1才有效,不然只能匹配到一個值了
  • Default Values 沒提取到就給默認值

     jsont 提取器詳解可參考文章:http://www.51testing.com/html/18/n-4461218.html

 

方法二:正則表達式提取,添加后置處理器-正則提取器

     

    正則提取器參數說明:

    • 要檢查的響應字段:樣本數據源,默認選主體。

    • 引用名稱:其他地方引用時的變量名稱(re_token),可自定義設置,引用方法:${引用名稱}

    • 正則表達式:數據提取器,()括號里為你要獲取的的值,如:"token": "(.*?)"

    • 模板:$$對應正則表達式提取器類型。-1全部,0 隨機,1第一個2第二個,以此類推,若只有一個正則一般就填寫$1$

    • 匹配數字:正則表達式匹配數據的所有結果可以看做一個數組,匹配數字即可看做是數組的第幾個元素。
      -1表示全部,0隨機,1第一個,2第二個,以此類推。若只要獲取到匹配的第一個值,則填寫1

    • 缺省值:匹配失敗時的默認值,可以隨便寫個,不寫也可以,或者勾選失敗時候使用空值

 

    原文地址:https://www.cnblogs.com/yoyoketang/p/11961988.html

 

方法三BeanShell PostProcessor,jmeter中添加后置處理器BeanShell PostProcessor 

 需求:提取sample返回json數據中所有name字段值,返回的json格式如下: 

         {“body”:{“apps”:[{“name”:”111”},{“name”:”222”}]}} 

    import org.json.*; #需先將json.jar包放到jmeter的lib目錄下

#import org.json.JSONObject;   #單獨導入
#import org.json.JSONArray String response_data = prev.getResponseDataAsString(); #獲取的string格式response轉換為json對象,進行后續處理 JSONObject data_obj = new JSONObject(response_data); #轉換為json對象(dict) String apps_str = data_obj.get("body").get("apps").toString(); #是string形式變量 須要toString轉換
log.info(response_data) #可以在log輸出返回值 JSONArray apps_array =
new JSONArray(apps_str); String[] result = new String[apps_array.length()]; for(int i=0;i<apps_array.length();i++){ JSONObject app_obj = new JSONObject(apps_array.get(i).toString()); String name = app_obj.get("name").toString(); result[i] = name; } vars.put("result", Arrays.toString(result)); #將變量放到jmeter變量中


#BeanShell斷言使用JSONObject

    import com.alibaba.fastjson.JSONException;
    import com.alibaba.fastjson.JSONObject;

    //狀態碼斷言

    if(ResponseCode.equals("200")){

        Failure = false;
    }
    else{
        Failure = true;
        FailureMessage = "響應HTTP狀態碼錯誤(非200): " + ResponseCode; //指定失敗原因
    }
    //獲取響應數據
    String response = prev.getResponseDataAsString();
    try {
        JSONObject respJson = JSONObject.parseObject(response);
        String code = respJson.getString("code");
        String msg = respJson.getString("msg");
     if ("1".equals(code)) {
        Failure=false;
     } else {
        Failure=true;
        FailureMessage = saleStr + "響應不成功," + code + ":" + msg;
        log.error(saleStr + "響應不成功," + prtno + "," + response);
        }
     }catch (JSONException e){

        Failure=true;
        FailureMessage = 響應解析不成功," + response;
        log.error("響應解析不成功," + prtno + "," + response);
    }

    

 參考文章:https://blog.csdn.net/weixin_42172039/article/details/105389838
http://www.javashuo.com/article/p-mpgonuzw-nr.html
 

引用變量 ${變量名}

 


免責聲明!

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



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