1. 程式人生 > 其它 >jmeter BeanShell斷言判斷返回的json中是否包含某欄位

jmeter BeanShell斷言判斷返回的json中是否包含某欄位

技術標籤:javajmeterjmeterjavajson

工作中,常遇到判斷結果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即可。