Bean Shell常用內置變量


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

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

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

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

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

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

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

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

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

    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號徐盈站,周邊多所國際學校,仁恆的房子品質有保障。無中介費。"
:   }
}

 斷言失敗如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM