1. 程式人生 > >Jmeter之Bean shell使用(五)

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);
}
複製程式碼