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
首先儲存一個接口的響應結果,好比在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號徐盈站,周邊多所國際學校,仁恆的房子品質有保障。無中介費。" : } }
斷言失敗以下: