十二、Jmeter 斷言-響應斷言、Json 斷言和 Beanshell 斷言

jusping發表於2020-09-28

所謂斷言,就是檢查介面的返回是否符合預期。

自動化測試指令碼,如果斷言做的不好,就好比測試用例不寫預期結果,因此我認為斷言是最重要一部分。

關於如何做好斷言,我覺得要做到:要斷言的內容一定是唯一的,每個介面都要做斷言。

舉例

用例:新增一條資料,然後去列表檢視新增是否成功。新增資料,如果成功返回資料id,如下:

{
"id": "63c81f8c-ba80-4504-ac1d-66f3774307b2",
"msg":"ok",
"code":0
}

列表資料返回如下:

無資料
{
"data": []
}
有資料
{
"data": [
{
"id": "63c81f8c-ba80-4504-ac1d-66f3774307b2",
"name": "zhangsan"
}
]
}

如何要斷言列表中存在我新增的資料?錯誤斷言:斷言data,不管是否存在我們要的資料,返回內容都包含data正確斷言:從新增介面提取返回的ID,然後斷言ID出現在列表中注意:如果id是自增形式的,建議使用json斷言,在這裡json斷言是首選

實現斷言的三種方式

我們首先要把新增介面的id提取出來,用到json提取器,具體配置見下圖

JSON斷言

json斷言配置如下,取出列表所有資料的id看是否存在新增返回的id

關於json斷言配置解釋,在前面文章已經有介紹。

響應斷言

通過響應斷言進行斷言預期,只需要判斷列表資料中出現id,配置如下

關於響應斷言配置解釋,在前面文章已經有介紹。

Beanshell斷言

Beanshell斷言在實際運用的比較少,除非是結果需要經過處理後進行斷言才用得到,本文為了舉例,用Beanshell斷言實現我們的目的,配置如下

附上指令碼原始碼

import org.json.*;

//獲取上一個請求的返回值
String response = prev.getResponseDataAsString();
//將返回值轉換為json
JSONObject responseJson = new JSONObject(response);
//從json提取data陣列
JSONArray dataList = responseJson.getJSONArray("data");
//遍歷所有列表,判斷是否存在id

for(i==0;i<dataList.length;i++){
JSONObject item = dataList[i];
if(item.get("id")==${id}){
Failure = false;
FailureMessage = "存在新增的id";
break;
}
else{
Failure = true;
FailureMessage = "不存在新增的id";
}
}

補充

假如我們執行刪除資料後,我們需要斷言不存在於列表
響應斷言取反

json斷言取反

Beanshell斷言讀者自己想想如何處理吧!

相關文章