­

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

1.簡介

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

2.預覽前置處理器

  首先我們來看一下JMeter的前置處理器,路徑:線程組(用戶)->添加->前置處理器();我們可以清楚地看到JMeter5中共有8個前置處理器(不包括jp@gc開頭的前置處理器,這個是宏哥安裝的插件),如下圖所示:

如果上圖您看得不是很清楚的話,宏哥總結了一個思維導圖,關於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的所有前置處理器就已經介紹完了,感謝你耐心的閱讀和學習。

 

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

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

 

 

 

Tags: