Bean Shell經常使用內置變量

 JMeter在它的BeanShell中內置了變量,用戶能夠經過這些變量與JMeter進行交互,其中主要的變量及其使用方法以下:html

log:寫入信息到jmeber.log文件,使用方法:log.info(「This is log info!」);java

ctx:該變量引用了當前線程的上下文,使用方法可參考:org.apache.jmeter.threads.JMeterContext。web

vars - (JMeterVariables):操做jmeter變量,這個變量實際引用了JMeter線程中的局部變量容器(本質上是Map),它是測試用例與BeanShell交互的橋樑,經常使用方法:shell

    a) vars.get(String key):從jmeter中得到變量值apache

    b) vars.put(String key,String value):數據存到jmeter變量中json

    更多方法可參考:org.apache.jmeter.threads.JMeterVariables測試

props - (JMeterProperties - class java.util.Properties):操做jmeter屬性,該變量引用了JMeter的配置信息,能夠獲取Jmeter的屬性,它的使用方法與vars相似,可是隻能put進去String類型的值,而不能是一個對象。對應於java.util.Properties。spa

    a) props.get("START.HMS");  注:START.HMS爲屬性名,在文件jmeter.properties中定義.net

    b) props.put("PROP1","1234");線程

prev - (SampleResult):獲取前面的sample返回的信息,經常使用方法:

    a) getResponseDataAsString():獲取響應信息

    b) getResponseCode() :獲取響應code

    更多方法可參考:org.apache.jmeter.samplers.SampleResult

sampler - (Sampler):gives access to the current sampler

jmeter之beanshell斷言實例

方法一:

首先儲存一個接口的響應結果,好比在http請求的後面添加beanshell後置處理器(BeanShell PostProcessor)來儲存http請求的響應結果:

import org.json.*;

//獲取上一個請求的返回值
String response = prev.getResponseDataAsString();
//將返回值轉換爲json
JSONObject responseJson = new JSONObject(response);
//獲取responseMessage
String message = responseJson.getString("responseMessage");
log.info("message的值:" + message);

//使用vars.put()方法儲存變量message
vars.put("message",message);
//獲取titleLink
String titleLink = responseJson.getJSONObject("data").getString("titleLink");
log.info("titleLink的值:" + titleLink);
//使用vars.put()方法儲存變量message
vars.put("titleLink",titleLink);

在後面的其餘接口中如何須要使用變量message 和 titleLink,能夠使用${message} 和 ${titleLink}來獲取變量的值;

變量儲存好後,在須要斷言的接口後面添加BeanShell斷言使用Failrue來標識斷言失敗,FailureMessage標示斷言失敗的緣由,如:

//使用vars.get()方法獲取變量的值
String message= vars.get("message");
 
if(!message.equals("success")) {
    Failure = true; 
    FailureMessage = "規則解析失敗";
}else{
    FailureMessage = "規則解析成功";
    }

方法二:

直接在須要斷言的接口後面使用beanshell斷言,使用Failrue來標識斷言失敗,FailureMessage標示斷言失敗的緣由,如:

import org.json.*;

//獲取上一個請求的返回值
String response = prev.getResponseDataAsString();
//將返回值轉換爲json
JSONObject responseJson = new JSONObject(response);
//獲取responseMessage
String message = responseJson.getString("responseMessage");
log.info("message的值:" + message);

if(!message.equals("success")){
    Failure = true; 
    FailureMessage = "規則解析失敗,message不等於success";
    return;
}

//獲取titleLink
Object titleLink = responseJson.getJSONObject("data").get("titleLink");
log.info("titleLink的值:" + titleLink.toString());


if(titleLink.toString().equals("null") || "".equals(titleLink)){
    Failure = true; 
    FailureMessage = "規則解析失敗,titleLink爲空";
}else if(!titleLink.toString().startsWith("http") && !titleLink.toString().startsWith("https")){
    Failure = true;
    FailureMessage = "規則解析失敗,titleLink不爲空,可是不是以http或者https開頭的";
}

 接口的響應數據爲:

{
:   "responseCode":"1",
:   "responseMessage":"success",
:   "responseType":null,
:   "data":
:   {
:   :   "city":"上海",
:   :   "rentUnit":"",
:   :   "source":"我的房源網",
:   :   "title":"徐盈路1188弄徐涇青浦徐涇租房",
:   :   "belonger":"我的",
:   :   "housingType":"住宅",
:   :   "floor":"高層",
:   :   "rentPrice":"17000",
:   :   "titleLink":"http://sh.grfy.net/rent/d-34612565.html",
:   :   "decoration":null,
:   :   "direction":null,
:   :   "isSplit":"",
:   :   "imgs":null,
:   :   "publishTime":"2018-07-25T23:20:33.471",
:   :   "contactMobile":null,
:   :   "website":"http://sh.grfy.net/rent/list_2_0_0_0-0_0_0-0_0_2_0_{}_.html",
:   :   "address":"徐涇",
:   :   "contactName":"王女士",
:   :   "houseType":"4室2廳2衛",
:   :   "estate":"徐涇",
:   :   "roomArea":"177",
:   :   "collectHouseType":"住宅",
:   :   "collectType":"出租",
:   :   "district":"青浦",
:   :   "totalFloor":"共20層",
:   :   "region":"上海",
:   :   "isRegister":"",
:   :   "desc":"仁恆西郊花園 4室2廳2衛 房屋亮點 新上 配套齊全 有陽臺 首次出租 隨時看房 出租要求 一家人 一年起租 租戶穩定 做息正常 房源描述小區環境好,物業管理成熟,私人會所實施配套齊全,臨近地鐵17號徐盈站,周邊多所國際學校,仁恆的房子品質有保障。無中介費。"
:   }
}

 斷言失敗以下:

相關文章
相關標籤/搜索