Jmeter之Bean shell使用(五)
1、在Test Plan中定義如下三個變數:
2、Bean Shell可指令碼如下:
a、bean shell可以接受傳入引數,如下圖:${u1} ${u2} ${u3}
b、引數可以通過bsh.args[]按順序提取
c、bean shell提供了一個內建變數Parameters,來儲存引數的集合
3、執行結果:
下圖中1輸入的這兩句設定:
ResponseCode = 500;
ResponseMessage = "This is a test";
下圖中2輸入的這兩句設定:
log.info(Parameters);
log.info(Label);
十、提取json資料
需求:提取sample返回json資料中所有name欄位值,返回的json格式如下:
{“body”:{“apps”:[{“name”:”111”},{“name”:”222”}]}}
jmeter中新增後置處理器BeanShell PostProcessor
說明:指令碼中的匯入的json包需要自己去網路下載後放到\lib\ext,請悉知
import org.json.*; String response_data = prev.getResponseDataAsString(); JSONObject data_obj = new JSONObject(response_data); String apps_str = data_obj.get("body").get("apps").toString(); JSONArray apps_array = new JSONArray(apps_str); String[] result = new String[apps_array.length()]; for(int i=0;i<apps_array.length();i++){ JSONObject app_obj = new JSONObject(apps_array.get(i).toString()); String name = app_obj.get("name").toString(); result[i] = name; } vars.put("result", Arrays.toString(result));
斷言
import txtWrite.*; String response_data = prev.getResponseDataAsString(); String assert_data="科目${num}"; TxtWrite writeData=new TxtWrite(); if(response_data.indexOf(assert_data)!=-1)//請求的response中有包含自定義字元,則斷言結果為false { Failure=false; String message="${__time(yyyy-MM-dd HH:mm:ss,)} 新建科目【"+assert_data+"】成功"; FailureMessage=message; writeData.contentToTxt("D:/xykyInterfaceAutoTest.log",message); }else { Failure=true; String message="${__time(yyyy-MM-dd HH:mm:ss,)} 新建科目【"+assert_data+"】失敗----------"; String response="本次請求response資料:"+prev.getResponseDataAsString()+"----------"; String need_assert="需要斷言的資料:"+assert_data; FailureMessage=message+response+need_assert; writeData.contentToTxt("D:/xykyInterfaceAutoTest.log",message+response+need_assert); }
1、在Test Plan中定義如下三個變數:
2、Bean Shell可指令碼如下:
a、bean shell可以接受傳入引數,如下圖:${u1} ${u2} ${u3}
b、引數可以通過bsh.args[]按順序提取
c、bean shell提供了一個內建變數Parameters,來儲存引數的集合
3、執行結果:
下圖中1輸入的這兩句設定:
ResponseCode = 500;
ResponseMessage = "This is a test";
下圖中2輸入的這兩句設定:
log.info(Parameters);
log.info(Label);
十、提取json資料
需求:提取sample返回json資料中所有name欄位值,返回的json格式如下:
{“body”:{“apps”:[{“name”:”111”},{“name”:”222”}]}}
jmeter中新增後置處理器BeanShell PostProcessor
說明:指令碼中的匯入的json包需要自己去網路下載後放到\lib\ext,請悉知
import org.json.*; String response_data = prev.getResponseDataAsString(); JSONObject data_obj = new JSONObject(response_data); String apps_str = data_obj.get("body").get("apps").toString(); JSONArray apps_array = new JSONArray(apps_str); String[] result = new String[apps_array.length()]; for(int i=0;i<apps_array.length();i++){ JSONObject app_obj = new JSONObject(apps_array.get(i).toString()); String name = app_obj.get("name").toString(); result[i] = name; } vars.put("result", Arrays.toString(result));
斷言
import txtWrite.*; String response_data = prev.getResponseDataAsString(); String assert_data="科目${num}"; TxtWrite writeData=new TxtWrite(); if(response_data.indexOf(assert_data)!=-1)//請求的response中有包含自定義字元,則斷言結果為false { Failure=false; String message="${__time(yyyy-MM-dd HH:mm:ss,)} 新建科目【"+assert_data+"】成功"; FailureMessage=message; writeData.contentToTxt("D:/xykyInterfaceAutoTest.log",message); }else { Failure=true; String message="${__time(yyyy-MM-dd HH:mm:ss,)} 新建科目【"+assert_data+"】失敗----------"; String response="本次請求response資料:"+prev.getResponseDataAsString()+"----------"; String need_assert="需要斷言的資料:"+assert_data; FailureMessage=message+response+need_assert; writeData.contentToTxt("D:/xykyInterfaceAutoTest.log",message+response+need_assert); }