【JMeter系列-9】 JMeter常用內置對象

在前文 Beanshell Sampler 與 Beanshell 斷言 中,初步闡述了JMeter beanshell的使用,接下來歸集整理了JMeter beanshell 中常用的內置對象及其使用。

注:示例使用JMeter版本爲5.1

1 vars

API 文檔 所言,這是定義變量的類,而這些變量是單個線程的本地屬性。聽起來有些難理解,其實我們只要知道,這個類的一系列方法基本是在針對變量進行取值和賦值,而且這個取值和賦值行爲只對當前線程的變量生效,而非全部線程。

在所有方法中,有兩個方法值得重點關注,其他方法感興趣的可以閱讀文檔做進一步瞭解。這兩個方法就是 get() 和 put()。

String get(String key) 方法,顧名思義,是取值方法。其要素如下:

  • 參數:String key,即一個字符串格式的key,
  • 返回值:參數 key 對應的 value,前提是存在這個鍵值對,否則會返回null
  • 作用:從內存中通過 key 獲取對應的 value

void put(String key, String value) 方法,則是賦值方法,其要素如下:

  • 參數:String key,即一個字符串格式的鍵,String value,則是字符串格式的值
  • 返回值:void,即沒有返回值
  • 作用:將一對 key 和 value 以鍵值對格式存入內存

下面通過一個示例,體會一下這兩個方法,先建立腳本結構如下:
在這裏插入圖片描述
【用戶定義的變量】的作用是:向內存中存入一個變量,參數名爲"name",參數值爲 “mu”,類似{ “name” : “mu”} 這樣一個鍵值對(僅爲示例,JMeter並不是這麼存儲變量的)

接下來,在【BeanShell取樣器】中寫入代碼:
在這裏插入圖片描述

  • vars.get(“name”):前面【用戶定義的變量】中已經存儲了 name 這個變量和其對應的值,這裏我們便可以獲取其值。
  • vars.put(“nameNew”,name + “gz”):將name 的值拼接"gz"後,賦值給變量nameNew,並存入內存。

運行腳本,察看結果樹:
在這裏插入圖片描述

2 ctx和prev

更多信息請見:API文檔

這個內置對象的類提供了很多方法,但在接口測試中常用的一個方法是 SampleResult getPreviousResult() ,其要素如下:

  • 參數:無
  • 返回值:SampleResult,即取樣器結果
  • 作用:獲取前一個取樣器的結果

SampleResult類 【API文檔】又提供了很多方法,以提供取樣器結果的諸要素,例如:

  • String getRequestHeaders() :獲取取樣器結果的請求頭
  • String getResponseCode():獲取取樣器結果的響應碼
  • String getResponseHeaders() :獲取取樣器結果的響應頭
  • String getResponseDataAsString():獲取取樣器結果的響應數據

其他方法請查閱API文檔

下面以一個示例進行演示,首先創建下面的腳本:
在這裏插入圖片描述
在【beanShell取樣器】中寫入以下語句:

import org.apache.jmeter.samplers.SampleResult;

// 獲取取樣器結果
SampleResult result = ctx.getPreviousResult();
// 獲取請求頭
String RequestHeaders = result.getRequestHeaders();
// 獲取響應頭
String ResponseHeaders = result.getResponseHeaders();
// 獲取響應碼
String responseCode = result.getResponseCode();
// 獲取響應數據
String responseData = result.getResponseDataAsString();
// 獲取url
URL url = result.getURL();
//
//log.info(RequestHeaders);
//log.info(ResponseHeaders);
log.info(responseData);

運行腳本,在控制檯可以看到相應的日誌輸出:
在這裏插入圖片描述
JMeter還提供了一個內置對象 prev,該內置對象可以直接使用 SampleResult 類中的方法,將上面示例中的【beanShell取樣器】的語句修改成下面的:

// 獲取請求頭
String RequestHeaders = prev.getRequestHeaders();
// 獲取響應頭
String ResponseHeaders = prev.getResponseHeaders();
// 獲取響應碼
String responseCode = prev.getResponseCode();
// 獲取響應數據
String responseData = prev.getResponseDataAsString();

log.info(RequestHeaders);
log.info(ResponseHeaders);
log.info(responseData);

運行後,發現效果是一樣的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章