1.簡介
后置處理器是在發出“取樣器請求”之后執行一些操作。取樣器用來模擬用戶請求,有時候服務器的響應數據在后續請求中需要用到,我們的勢必要對這些響應數據進行處理,后置處理器就是來完成這項工作的。例如系統登錄成功以后我們需要獲取SessionId,在后面的業務操作中服務器會驗證這個SessionId,獲取SessionId這個功能過程就可以用后置處理器中的正則表達式提取器來完成。
2.預覽后置處理器
首先我們來看一下JMeter的后置處理器,路徑:線程組(用戶)->添加->后置處理器();我們可以清楚地看到JMeter5中共有11個后置處理器(不包括jp@gc開頭的后置處理器,這個是宏哥安裝的插件),如下圖所示:
如果上圖您看得不是很清楚的話,宏哥總結了一個思維導圖,關於JMeter5的前置處理器類型,如下圖所示:
通過以上的了解,我們對后置處理器有了一個大致的了解和認識。下面宏哥就給小伙伴或則童鞋們分享講解一些通常在工作中會用到的后置處理器。
3.常用后置處理器詳解
這一小節,宏哥就由上而下地詳細地講解一下常用的后置處理器。
3.1JSR223 后置處理程序
JSR223后置處理程序,用法和JSR223 PreProcessor類似,可以參考宏哥的這一篇文章:Jmeter(十六) - 從入門到精通 - JMeter前置處理器(詳解教程)
1、我們先來看看這個JSR223 后置處理程序長得是啥樣子,路徑:線程組 > 添加 > 后置處理器 > JSR223 后置處理程序,如下圖所示:
2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
parameter:要傳遞到腳本文件或腳本的參數列表;
file name:用於執行的腳本文件,若沒有腳本文件,將執行腳本;
Script:傳遞給JSR223執行的腳本;如果提供了腳本文件,則執行腳本文件,否則執行腳本。
3.2調試后置處理程序
調試后置處理程序,使用正則表達式為從另一個HTTP請求中提取的HTTP參數指定動態值,配合regular expression extractor使用。暫時沒找到好的例子,后面想到補充。。
1、我們先來看看這個調試后置處理程序長得是啥樣子,路徑:線程組 > 添加 > 后置處理器 > 調試后置處理程序,如下圖所示:
2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
Regular Expression Reference Name:調用的正則表達式提取器中的引用名稱;
Parameter names regexp group number:用於提取參數名稱的正則表達式的組編號;
Parameter values regex group number:用於提取參數值的正則表達式的組編號。
3.3JDBC 后置處理程序
JDBC 后置處理程序,實際上JIBC PostProcessor就是一個JDBC Request,它與JDBC Request功能相同,都可以執行SQL語句。在測試的過程中可能會遇到這樣的測試場景:我們用JDBC Request修改了一些數據,當測試完成后,我們希望還原到原先狀態,此時我們可以用JDBC PostProcessor來完成,當然用JDBC Request也可以完成。具體的JDBC PostProcessor的使用參考宏哥關於JDBC Request的這篇文章:Jmeter(七) - 從入門到精通 - 建立數據庫測試計划實戰<MySQL數據庫>(詳解教程)。
1、我們先來看看這個JDBC 后置處理程序長得是啥樣子,路徑:線程組 > 添加 > 后置處理器 > JDBC 后置處理程序,如下圖所示:
3.4結果狀態處理器
結果狀態處理器,實際上在測試的時候我們也經常會遇到這樣的測試場景:在一些測試用例失敗之后我們需要進行一些操作,例如停止測試,這里可以使用結果狀態處理器。
1、我們先來看看這個結果狀態處理器長得是啥樣子,路徑:線程組 > 添加 > 后置處理器 > 結果狀態處理器,如下圖所示:
2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
Language:語言,開發腳本選擇的語言,使用的JSR223語言,可根據需要選擇;
Parameters:參數,傳遞給腳本的參數;
File Name:文件名,本地開發的腳本文件(會覆蓋在JMeter里編寫的腳本);
Script compilation caching:存儲編譯的腳本,默認勾選;
Script:要運行腳本。編寫腳本的區域。
3.5XPath提取器
Xpath提取器,如果請求返回的消息為xml或html格式的,可以用XPath提取器來提取需要的數據。
1、我們先來看看這個 Xpath提取器長得是啥樣子,路徑:線程組 > 添加 > 后置處理器 > Xpath提取器,如下圖所示:
2、關鍵參數說明如下:
APPly to:作用范圍(返回內容的斷言范圍)
Main sample and sub-samples:作用於父節點的取樣器及對應子節點的取樣器
Main sample only:僅作用於父節點的取樣器
Sub-samples only:僅作用於子節點的取樣器
JMeter Variable:作用於jmeter變量(輸入框內可輸入jmeter的變量名稱)
XML Parsing Options:要解析的XML參數
UseTidy:當需要處理的頁面是HTML格式時,必須選中該選項;如果是XML或XHTML格式(例如RSS返回),則取消選中;
Quiet表示只顯示需要的HTML頁面,
Report errors表示顯示響應報錯,
Show warnings表示顯示警告;
Use Namespaces:如果啟用該選項,后續的XML解析器將使用命名空間來分辨;
Validate XML:根據頁面元素模式進行檢查解析;
Ignore Whitespace:忽略空白內容;
Fetch external DTDs:如果選中該項,外部將使用DTD規則來獲取頁面內容;
Return entire XPath fragment of text content:返回文本內容的整個XPath片段;
Reference Name:存放提取出的值的參數。
XPath Query:用於提取值的XPath表達式。語法參考:XPath
匹配數字:取第幾個匹配結果,0隨機,-1全部,1代表第一個,2代表第二個,....以此類推
Default Value:參數的默認值。
3.5.1實例
1、新建測試計划,線程組下添加1個取樣器 天氣預報,如下圖所示:
2、天氣預報返回HTML,然后再添加xpath提取器,如下圖所示:
舉例://div[@class='w_city city_guonei']//a/@href
選取div下帶有class屬性為w_city city_guonei的href屬性節點。
注釋://div選取了div節點的所有子節點
@選取屬性
/@href 從根節點選取所有的href屬性
Xpath提取器設置
3、繼續添加GetWeatherInfo取樣器,獲取xpath提取到的參數,如下圖所示:
4、配置好以后,點擊“保存”,運行JMeter,查看表格結果(取樣器訪問博客園首頁和訪問度娘間隔3s),如下圖所示:
3.6XPath2 Extractor
Xpath2提取器,雖然JMeter官方文檔說可以使用XPath2查詢語言從結構化響應(XML或(X)HTML)中提取值,但目前測試只支持從XML響應中提取值;從HTML中提取會報錯,這個可以通過查看結果樹中選擇XPath2 Tester來驗證。
1、我們先來看看這個 Xpath2提取器長得是啥樣子,路徑:線程組 > 添加 > 前置處理器 > Xpath2提取器,如下圖所示:
2、關鍵參數說明如下:
APPly to:作用范圍(返回內容的斷言范圍)
Main sample and sub-samples:作用於父節點的取樣器及對應子節點的取樣器
Main sample only:僅作用於父節點的取樣器
Sub-samples only:僅作用於子節點的取樣器
JMeter Variable:作用於jmeter變量(輸入框內可輸入jmeter的變量名稱)
Return entire XPath fragment of text content:返回文本內容的整個XPath片段;
Name of created variable:存放提取出的值的參數。
XPath Query:用於提取值的XPath表達式。
Match No 匹配數字:取第幾個匹配結果,0隨機,-1全部,1代表第一個,2代表第二個,....以此類推
Default Value:參數的默認值。
Namespaces aliases list:命名空間別名列表。就是這個功能,能讓使用命名空間比使用舊的XPath提取器更方便。關於命名空間含義,可以看官方文檔:XML 命名空間,但是寫的不夠詳細,詳細的參考這里:XML 命名空間(XML Namespaces)介紹以及節點讀取方法。由於XPath2對於表達式的要求比較嚴格,對於帶命名空間的XML(包括默認的命名空間),使用不帶命名空間前綴的表達式是查詢不到結果的。
3.7BeanShell 后置處理程序
BeanShell 后置處理程序,如果請求返回的消息為xml或html格式的,可以用XPath2提取器來提取需要的數據。這個估計是JMeter5.0新加的吧,具體用法和Xpath提取器的應該差不多的,可以參考上邊Xpath提取器的用法。
1、我們先來看看這個 BeanShell 后置處理程序長得是啥樣子,路徑:線程組 > 添加 > 后置處理器 > BeanShell 后置處理程序,如下圖所示:
2、關鍵參數說明如下:
Reset bsh.Interpreter before each call: 每次迭代是否重置解釋器
Reset Interpreter :false
Parameters to be passed to BeanShell(=>String Parameters and String []bsh.args) 參數傳遞,字符串或者數組
Parameters:
Script file(overrides script): 腳本文件
File Name:
Script(variables:ctx vars props prev data log): 腳本編輯()
3.7.1實例
在這里宏哥就列舉一個簡單的例子,響應結果中有中文亂碼,使用BeanShell 后置處理程序來處理中文亂碼。
1、新建測試計划,線程組下添加1個取樣器 訪問度娘,如下圖所示:
2、然后再添加BeanShell 后置處理程序,設置腳本:prev.setDataEncoding("UTF-8"); ,如下圖所示:
3、配置好以后,點擊“保存”,運行JMeter,禁用BeanShell 后置處理程序,查看表格結果(中文亂碼),如下圖所示:
(1)禁用BeanShell 后置處理程序,查看表格結果(有中文亂碼)
(2)啟用BeanShell 后置處理程序,查看表格結果(無中文亂碼)
4.小結
好了,今天到這里所有的JMeter后置處理器就全部介紹分享完了,感謝您的耐心閱讀!!!
您的肯定就是我進步的動力。如果你感覺還不錯,就請鼓勵一下吧!記得隨手點波 推薦 不要忘記哦!!!
別忘了點 推薦 留下您來過的痕跡