周末學習了一下beanshell腳本的使用,下面用一個例子演示下
首先一個請求A的響應內容如下
{ "status": "ok", "msg": "ok", "data": { "records": [{ "id": 223, "contractClassify": null, "contractClassifyId": 874, "contractTypeId": 2, "formId": "135", }, { "id": 229, "contractClassify": null, "contractClassifyId": 874, "contractTypeId": 1, "formId": "137", ], "total": 13, "size": 10, "current": 1, }, }
在進行處理前,先把一個jar包放進jmeter安裝目錄下的lib目錄下 json-20180130.jar
在請求A下新增一個BeanShell后置處理器,然后可以在里邊編寫腳本來處理數據
1、首先先把返回內容轉為一個json對象
- 使用 prev.getResponseDataAsString()獲取上個請求的返回數據(字符串格式);
- 利用 JSONObject 將返回數據構造成一個 JSONObject對象,並將其賦給 responseData;
- 使用log.info()打印一下結果,注意在使用log.info()時需要使用toString()將json對象轉為字符串才能正常打印
import org.json.*; String responseData = prev.getResponseDataAsString(); //獲取請求的返回結果 JSONObject response = new JSONObject(responseData); //把返回值構造為json對象 log.info("response="+response.toString()); // 打印一下結果
2、獲取返回數據中的 "data"
- 使用 xx.get(key) 獲取某個字段的內容
data = response.get("data"); //獲取返回數據中的data log.info("data="+data.toString());
3、獲取 "data"下的"total"
- 如果json對象下嵌套了json對象,可以繼續使用 .get(key) 來獲取嵌套字段的內容
total = response.get("data").get("total"); //獲取返回數據中data下的total log.info("total="+total.toString());
4、獲取 "data"下"records"的內容
- 由於records的內容是個數組,所以要使用 getJSONArray() 來獲取它的數據
records = response.get("data").getJSONArray("records"); //使用getJSONArray提取records數組 log.info("records="+records);
5、獲取record數組的長度
int len = records.length(); // 獲取數組的長度 String strlen = Integer.toString(len); //轉為字符串 log.info("len="+strlen); // 打印結果,其實直接打印len也行
6、設置一個新變量,給后面請求使用
vars.put("temp", String.valueOf(total)); // 創建一個變量temp,並把total的值轉成字符串賦給它(必須轉成字符串再賦給temp,不然會報錯,也可以使用total.toString()轉換)
再新建一個請求B,然后在請求B下添加一個BeanShell后置處理器,如下
這個BeanShell腳本如下
String temp1 = vars.get("temp");
log.info("temp1="+temp1)
執行結果如下
可以看到變量temp在下一個請求中引用成功,並且在后續的beanshell腳本中也能通過 vars.get(String key)獲取(注意變量名加引號)