jmeter BeanShell斷言判斷返回的json中是否包含某欄位
阿新 • • 發佈:2020-12-11
工作中,常遇到判斷結果json中的某些欄位是否和預期一樣,而這些欄位往往比較多,這時可以用到BeanShell斷言。
例如:
返回結果json是:
{ "result": { "realtime": { "wid": "00", "temperature": "-2", "direct": "北風", "aqi": "27", "humidity": "27", "power": "4級", "info": "晴" }, "city": "北京", "future": [ { "date": "2020-12-07", "wid": { "night": "00", "day": "00" }, "temperature": "-7\/2℃", "weather": "晴", "direct": "西北風轉西風" }, { "date": "2020-12-08", "wid": { "night": "01", "day": "01" }, "temperature": "-6\/2℃", "weather": "多雲", "direct": "南風轉西南風" }, ] }, "reason": "查詢成功!", "error_code": 0 }
目的:取future 下第一個物件的weather 值,是否為“雨”。
一、首先新增BeanShell斷言
【執行緒組】-右鍵-【新增】-【斷言】-【BeanShell斷言】。
二、在BeanShell斷言新增指令碼
思路:獲取結果json - 取得json中需要的欄位值 - 定義預期值 - 與預期值進行對比 - 獲取斷言結果
import com.alibaba.fastjson.*; import org.json.*; String response = prev.getResponseDataAsString(); // 獲取Response JSONObject responseObj = JSON.parseObject(response); // 整個Response作為JSON物件 JSONObject result = responseObj.getJSONObject("result"); JSONArray future = result.getJSONArray("future"); JSONObject reponseObjS = (JSONObject)future.get(0); String weather = reponseObjS.getString("weather"); //final String weatherParam="weather"; final String weatherValue = "雨"; String text = null; if(!(weatherValue.equals(weather))){ Failure = true; text = "非雨"; FailureMessage = text; }
三、結果
四、最後
如果需要對比的欄位(返回值與預期值)特別多,可以把預期值放在一個java類中,或者用enmu類,但是jmeter無法用source匯入enmu類,所以可以用final即可。