1. 程式人生 > >jmeter之beanshell斷言---數據處理

jmeter之beanshell斷言---數據處理

源代碼 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 = new
JSONObject(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斷言---數據處理