1. 程式人生 > 實用技巧 >Jmeter(十六) - 從入門到精通 - JMeter前置處理器(詳解教程)

Jmeter(十六) - 從入門到精通 - JMeter前置處理器(詳解教程)

1.簡介

  前置處理器是在發出“取樣器請求”之前執行一些操作。如果將前置處理器附加到取樣器元件,則它將在該取樣器元件執行之前執行。前置處理器最常用於在取樣器請求執行前修改其設定,或更新未從響應文字中提取的變數。前置處理器主要是用來處理請求前的一些準備工作,比如引數設定、環境變數設定等等。

2.預覽前置處理器

  首先我們來看一下JMeter的前置處理器,路徑:執行緒組(使用者)->新增->前置處理器();我們可以清楚地看到JMeter5中共有8個前置處理器(不包括[email protected]開頭的前置處理器,這個是巨集哥安裝的外掛),如下圖所示:

如果上圖您看得不是很清楚的話,巨集哥總結了一個思維導圖,關於JMeter5的前置處理器型別,如下圖所示:

通過以上的瞭解,我們對前置處理器有了一個大致的瞭解和認識。下面巨集哥就給小夥伴或則童鞋們分享講解一些通常在工作中會用到的前置處理器。

3.常用前置處理器詳解

這一小節,巨集哥就由上而下地詳細地講解一下常用的前置處理器。

3.1JSR223 PreProcessor

JSR223 預處理程式,用於對於採集器進行處理,且是在sampler啟動之前。

1、我們先來看看這個JSR223 PreProcessor長得是啥樣子,路徑:執行緒組 > 新增 > 前置處理器 > JSR223預處理程式

,如下圖所示:

2、關鍵引數說明如下:

Name:名稱,可以隨意設定,甚至為空;

Comments:註釋,可隨意設定,可以為空;

Language:語言,開發指令碼選擇的語言,使用的JSR223語言,可根據需要選擇;

Parameters:引數,傳遞給指令碼的引數;

File Name:檔名,本地開發的指令碼檔案(會覆蓋在JMeter裡編寫的指令碼);

Script compilation caching:儲存編譯的指令碼,預設勾選;

Script:要執行指令碼。編寫指令碼的區域。

3.1.1例項

用法類似Beanshell 取樣器,可以參考:Jmeter(十五) - 從入門到精通 - JMeter匯入自定義的Jar包

這篇文章。具體用法如下:

1、新建測試計劃,執行緒組下新增JSR223 預處理程式,如下圖所示:

2、然後再新增除錯取樣器,如下圖所示:

3、參考指令碼程式碼:

import com.bjhg.test.BeanShellJMeter;

BeanShellJMeter bs = new BeanShellJMeter("巨集哥","北京");

vars.put("username",bs.getUserName());

4、配置好以後,點選“儲存”,執行JMeter,檢視錶格結果,如下圖所示:

3.2使用者引數

使用者引數,用於做幾組引數給執行緒組的各個執行緒使用,如果執行緒數多於使用者引陣列數,則多出來的執行緒則從第一組使用者引數開始依次呼叫引陣列;簡單來說就是給不同執行緒組(使用者)使用不一樣的變數值。

1、我們先來看看這個使用者引數長得是啥樣子,路徑:執行緒組 > 新增 > 前置處理器 > 使用者引數,如下圖所示:

2、關鍵引數說明如下:

Name:名稱,可以隨意設定,甚至為空;

Comments:註釋,可隨意設定,可以為空;

Update Once Per Iteration:標識是否每輪迭代更新一次元素;

3.2.1例項

1、新建測試計劃,執行緒組下新增使用者引數,如下圖所示:

2、然後再設定執行緒數為3,如下圖所示:

3、配置好以後,點選“儲存”,執行JMeter,檢視錶格結果,如下圖所示:

3.3HTML連結解析器

HTML連結解析器,用於從前一個sampler返回的html頁面中按照規則解析連結和表單,再根據此處理器所在的sampler中的規則進行匹配修改,而後該sampler會執行;

1、我們先來看看這個HTML連結解析器長得是啥樣子,路徑:執行緒組 > 新增 > 前置處理器 > HTML連結解析器,如下圖所示:

3.3.1例項

1、新建測試計劃,執行緒組下新增1個僅此一次控制器,在僅此一次控制器下再新增1個HTTP資訊頭管理器,2個取樣器 度娘搜尋 和 點選連結,如下圖所示:

(1)HTTP資訊頭管理器

(2)度娘搜尋(此取樣器為一個搜尋請求,返回HTML頁面)

(3)點選連結(此取樣器新增一個HTML連結解析器,解析器會將取樣器返回的HTML頁面按照取樣器中的各個正則表示式匹配併傳送此取樣器)

2、然後再在點選連結 新增HTML連結解析器,如下圖所示:

3、配置好以後,點選“儲存”,執行JMeter,檢視錶格結果(),如下圖所示:

(1)度娘搜尋結果

(2)點選連結結果

3.4HTTP URL 重寫修飾符

HTTP URL重寫修改器,此處理器與HTTP Link Parser類似,但專用於使用url重寫來儲存sessionId而非cookie的http request,線上程組級別新增此修改器則應用於所有sample,若為單個sample新增則只適用該sample。顧名思義就是幫我們重定向URL請求;重寫URL來儲存會話id。我們知道瀏覽器與伺服器之間的會話一般用cookie來管理,在JMeter中就是HTTP Cookie管理器,但是在實踐工作中還有另外一種會話保持方式。比如系統只允許登入成功的使用者才可以訪問系統,當使用者登入成功後返回一個SessionID(或者JsessionId)給使用者,後續訪問都需要驗證這個SessionID。如果後續請求都是以Get的方式提交表單,那麼SessionID需要附加在URL連結中,而且每一個Get的請求都是如此,這種重複的工作,顯然是可以用一個操作來完成的,在JMeter中這個操作就是HTTP URL重寫修飾符。

為什麼使用URL地址重寫?
因為有些瀏覽器的安全設定,禁用了session.而session的原理則是把session的ID儲存在客戶端的cookie中。所以這個時候如果cookie功能被禁用的話,所有使用session的功能將失效.如果採用url地址重寫技術,則server會把session經過編碼以後,寫到url地址後面當做引數來傳遞.這樣既提高了客戶端的安全性,同時也避免了功能被遮蔽的風險。

1、我們先來看看這個HTTP URL重寫修飾符長得是啥樣子,路徑:執行緒組 > 新增 > 前置處理器 > HTTP URL重寫修飾符,如下圖所示:

2、關鍵引數說明如下:

Name:名稱,可以隨意設定,甚至為空;

Comments:註釋,可隨意設定,可以為空;

Session Argument Name:會話引數名稱,用於搜尋sessionId,其他sample也可通過此引數來 呼叫其獲取的sessionId;

Path Extension:路徑擴充套件,如url添加了分號作為分割,則勾選此項;

Do not use equals in path extension:用於url不用等號來分割key和value的型別;

Do not use questionmark in path extension:用於不帶?的型別;

Cache Session Id?:勾選此項則會儲存在其掛載的sample上獲取到的sessionId供後邊的其他sample使用;

URL Encode:是否使用url編碼;

3.4.1例項HTTP URL重寫修飾符原理

3.5JDBC PreProcessor

資料庫前處理器,用於在sample開始前查詢資料庫並獲取一些值;jdbc預處理程式,和取樣器的JDBC Request一樣。可以參考巨集哥的這一篇文章:Jmeter(七) - 從入門到精通 - 建立資料庫測試計劃實戰<MySQL資料庫>(詳解教程)

1、我們先來看看這個JDBC PreProcessor長得是啥樣子,路徑:執行緒組 > 新增 > 前置處理器 > JDBC預處理程式,如下圖所示:

2、關鍵引數說明如下:

Name:名稱,可以隨意設定,甚至為空;

Comments:註釋,可隨意設定,可以為空;

Variable Name of Pool declared in JDBC Connection Configuration:連線池名稱,需與JDBC連結配置中的Variable Name相同(此前處理器需要一個JDBC Connection Configuration,此配置器在配置元件中);

Query Type:資料庫查詢型別,根據需要自行選擇;

Query:資料庫語句輸入框,根據需要輸入,注意結尾不要加”;”;

Parameter values:引數名稱,如果Query的語句中有”?”則此處填值,可以使用呼叫引數方式;

Parameter types:引數型別,與Parameter values對應,設定引數型別,與sql欄位型別相同;

Variable names:設定此項可以獲取固定列的所有值;

Result variable name:隨意設定一個名稱,則此名稱會被作為一個引數並對應Query出來的內容;可以使用引數呼叫的方法來獲取此設定的名稱對應的值;

Query timeout(s):超時時間;

Handle ResultSet:有四個選項,結果儲存的方式;

3.6RegEx User Parameters

正則表示式,使用正則表示式為從另一個HTTP請求中提取的HTTP引數指定動態值,配合regular expression extractor使用。暫時沒找到好的例子,後面想到補充。。

1、我們先來看看這個JSR223 PreProcessor長得是啥樣子,路徑:執行緒組 > 新增 > 前置處理器 > JSR223預處理程式,如下圖所示:

2、關鍵引數說明如下:

Name:名稱,可以隨意設定,甚至為空;

Comments:註釋,可隨意設定,可以為空;

Regular Expression Reference Name:呼叫的正則表示式提取器中的引用名稱;

Parameter names regexp group number:用於提取引數名稱的正則表示式的組編號;

Parameter values regex group number:用於提取引數值的正則表示式的組編號。

3.7Sample Timeout

超時器,用於設定sample的超時時間,如果完成時間過長,此前處理器會排程計時器任務以中斷樣本;

1、我們先來看看這個Sample Timeout長得是啥樣子,路徑:執行緒組 > 新增 > 前置處理器 > Sample Timeout,如下圖所示:

2、關鍵引數說明如下:

Name:名稱,可以隨意設定,甚至為空;

Comments:註釋,可隨意設定,可以為空;

Sample timeout:超時時間;

3.8BeanShell PreProcessor

BeanShell是一種免費的java原始碼直譯器,支援物件式的指令碼語言,也可以嵌入到java原始碼中。添加了該處理器後,可直接在裡面編寫java程式碼,實現你要的功能操作。

用法類似Beanshell 取樣器,可以參考:Jmeter(十五) - 從入門到精通 - JMeter匯入自定義的Jar包這篇文章。

1、我們先來看看這個BeanShell PreProcessor長得是啥樣子,路徑:執行緒組 > 新增 > 前置處理器 > BeanShell預處理程式,如下圖所示:

2、關鍵引數說明如下:

Name:名稱,可以隨意設定,甚至為空;

Comments:註釋,可隨意設定,可以為空;

Language:語言,開發指令碼選擇的語言,使用的JSR223語言,可根據需要選擇;

Parameters:引數,傳遞給指令碼的引數;

File Name:檔名,本地開發的指令碼檔案(會覆蓋在JMeter裡編寫的指令碼);

Script compilation caching:儲存編譯的指令碼,預設勾選;

Script:要執行指令碼。編寫指令碼的區域。

4.小結

  好了,今天到這裡JMeter的所有前置處理器就已經介紹完了,感謝你耐心的閱讀和學習。

您的肯定就是我進步的動力。如果你感覺還不錯,就請鼓勵一下吧!記得隨手點波推薦不要忘記哦!!!

別忘了點推薦留下您來過的痕跡