之前講了jmeter中beanshell腳本的使用,其實還可以借助beanshell來進行斷言,這種斷言方式相對響應斷言、json斷言來說更為靈活,可以自己構造想要斷言的內容
先來看一下接口的場景:
接口A是一個新增數據接口,新增成功后,列表中的數據會多出1條,但是這個接口返回內容比較少,只有一個msg信息和狀態碼。
所以為了更好的斷言,我打算每次新增前后都調一下查詢接口,獲取新增前后,列表中的數據總數,如果前后相差1,則認為新增成功;如果前后相等,則認為接口請求失敗
開始嘗試了json斷言,如下
但是實際運行后,結果如下
所以后來嘗試使用 beanshell 斷言
import org.json.*; String responseData = prev.getResponseDataAsString(); //獲取請求的返回結果 JSONObject response = new JSONObject(responseData); //log.info(response.getJSONObject("data").toString()); //log.info(response.getJSONObject("data").get("total").toString()); data = response.get("data").get("total")-1; // 新增成功后的數據總量減去1 //log.info(data.toString()); if (data.equals(${total1})) //判斷新增一條數據后再減去1的值與新增前是否一致 { Failure=false ; // 如果相等,則斷言成功 FailureMessage = "斷言成功"; // log.info(data.toString()); } else { Failure=true; // 如果不相等,則斷言失敗 FailureMessage = "斷言失敗"; // log.info(data.toString()); }
data.equals(${total1}) 是判斷data的值與total是否相等;
如果相等,則這個接口是成功的,我們期望這個斷言標記為成功
beanshell使用Failure來標記失敗,所以這里我們寫 Failure=false ,表示不返回失敗;
如果不想等,則接口調用失敗,我們期望這個斷言標記為失敗
所以這里我們寫 Failure=true ,返回失敗;
FailureMessage是自定義的斷言信息,當斷言失敗時,可以打印出結果
這樣就斷言就寫好了,可以參考上述方式,從響應內容中提取想要的字段信息,來和預期結果進行比對。