jmeter之beanshell斷言---數據處理
阿新 • • 發佈:2018-07-29
源代碼 fail rda sco 響應 mes 我們 自由 結果
在做接口測試時,對響應數據的校驗是非常重要的部分;在使用Jmeter進行接口測試時,有多種respone校驗方式,比如響應斷言、BeanShell斷言等等,BeanShell斷言可以自定義斷言,自由靈活的用腳本實現斷言。
1.什麽是BeanShell ?
小型嵌入式Java源代碼解釋器,具有對象腳本語言特性,能夠動態地執行標準JAVA語法
運行其內部的腳本處理Java應用程序,還可以在運行過程中動態執行你java應用程序執行java代碼,因為BeanShell是用java寫的,運行在同一個虛擬機的應用程序,因此可以自由地引用對象腳本並返回結果。
下面來介紹如何使用beanshell來進行斷言和數據處理,假如我們有如下的response數據:
1 { 2 "message": "不能發送小於當前時間點的定時任務", 3 "statusCode": 200 4 }
(1).我們使用JSONObject對象來獲取json數據,首先需要下載org.json的jar包,然後在測試計劃中導入該jar包,並在jmeter的lib目錄下放入該jar包,下面驗證statusCode的值是否等於200:
1 import org.json.*; 2 3 //獲取上一個請求的返回 4 String jsonString = prev.getResponseDataAsString(); 5 JSONObject responseJson = newJSONObject(jsonString); 6 7 //判斷返回值是否和預期一致 8 if (responseJson.getInt("statusCode") != 200) { 9 //把斷言失敗置為真,即用例失敗,並在結果樹中顯示FailureMessage 10 Failure = true; 11 FailureMessage = "statusCode的返回值有誤"; 12 }
(2).如果要驗證respone中message的值是否與預期一致,需要怎麽做呢?
1 import org.json.*; 2 3 //獲取上一個請求的返回 4 String jsonString = prev.getResponseDataAsString();5 JSONObject responseJson = new JSONObject(jsonString); 6 7 String fbpcontent = responseJson.getString("message"); 8 if (!fbpcontent.equals("不能發送小於當前時間點的定時任務")) { 9 //把斷言失敗置為真,即用例失敗,並在結果樹中顯示FailureMessage 10 Failure = true; 11 FailureMessage = "message與實際值不一致"; 12 }
假如我們有如下的response響應數據:
1 { 2 "statusCode": 200, 3 "data": [ 4 { 5 "i": "50356", 6 "n": "項目一", 7 "v": "2.0", 8 "iconUrl": "", 9 }, 10 { 11 "i": "45280", 12 "n": "項目二", 13 "v": "3.0", 14 "iconUrl": "", 15 }, 16 { 17 "i": "14656", 18 "n": "項目三", 19 "v": "2.6", 20 "iconUrl": "", 21 }, 22 { 23 "i": "66213", 24 "n": "項目四", 25 "v": "5.0", 26 "iconUrl": "", 27 } 28 ] 29 }
(3).我們需要解析數組data的值,如何去解析呢?
1 import org.json.*; 2 import java.util.Arrays; 3 4 //獲取上一個請求的返回 5 String jsonContent = prev.getResponseDataAsString(); 6 7 JSONObject response = new JSONObject(jsonContent); 8 JSONArray groups = response.getJSONArray("data"); 9 String strData= groups.toString(); 10 log.info(strData)
現在有更加復雜格式的respone數據:
1 { 2 "priorityGroups": { 3 "proId": 1234, 4 "name": "項目一", 5 "groups": [ 6 { 7 "id": "50356", 8 "items": [ 9 { 10 "proId": 1360, 11 "n": "PC端", 12 "index": 1 13 }, 14 { 15 "proId": 1361, 16 "n": "iOS端", 17 "index": 2 18 }, 19 { 20 "proId": 1362, 21 "n": "安卓端", 22 "index": 4 23 } 24 ] 25 } 26 ] 27 }, 28 "promotion": { 29 "proId": 1364, 30 "cusId": 84, 31 "name": "項目二", 32 "from": 1470821215, 33 "to": 1470907615, 34 "status": 1, 35 "objectId": 1069, 36 "createBy": 394, 37 "eff": 1470821215000, 38 "createTime": 1470821155000 39 } 40 }
(4).我們需要解析groups中的數據,需要怎麽實現呢?
1 import org.json.JSONArray; 2 import org.json.JSONException; 3 import org.json.JSONObject; 4 5 String jsonContent = prev.getResponseDataAsString(); 6 7 JSONObject response = new JSONObject(jsonContent); 8 JSONArray groups = response.getJSONObject("priorityGroups").getJSONArray("groups"); 9 String strGroups = groups.toString();
jmeter之beanshell斷言---數據處理