返回的結果,提取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
引用變量 ${變量名}