翻譯:https://blog.trigent.com/jmeter-blog-series-jmeter-beanshell-example正則表達式
在這個例子中,咱們將演示在Apache JMeter中使用BeanShell組件。咱們將使用BeanShell腳本語言編寫一個簡單的測試用例。這些腳本將成爲咱們將爲此示例配置的BeanShell組件的一部分。在咱們看看不一樣BeanShell組件的用法以前,讓咱們來看看這個概念。shell
Apache JMeter是一個基於Java的開源工具,使您能夠對應用程序執行功能,負載,性能和迴歸測試。應用程序可能在Web服務器上運行,也多是獨立的。它支持在包含靜態和動態資源的客戶端 - 服務器和Web模型上進行測試。它支持各類用於進行測試的協議,包括HTTP,HTTPS,JDBC,FTP,JMS,LDAP,SOAP等。數據庫
快速瀏覽一些功能:apache
BeanShell是一種用Java編寫的腳本語言。它是JSR-274規範的一部分。它在某種程度上是經過提供腳本功能對主流Java語言的擴展。它是一個嵌入式解釋器,可識別強類型Java語法和腳本功能,如shell命令,鬆散類型和方法閉包(做爲對象的功能)。BeanShell有助於快速開發和測試Java應用程序。能夠將其用於快速或快速原型設計或快速測試小功能或過程。該腳本也能夠嵌入Java代碼中,並使用Interpreter API調用。編程
BeanShell還能夠用做配置語言,由於它支持建立基於Java的變量,如字符串,數組,映射,集合和對象。它還支持所謂的腳本變量或鬆散類型的變量。BeanShell腳本也能夠在外部文件中以獨立模式編寫,而後能夠由Java程序加載和執行。BeanShell還提供了相似shell編程的UNIX概念。您能夠在GUI shell中以交互方式提供BeanShell命令,並當即查看輸出。數組
有關BeanShell的更多詳細信息,請參閱官方網站http://www.beanshell.org服務器
JMeter提供瞭如下可用於編寫BeanShell腳本的組件閉包
這些組件中的每個都容許您編寫腳原本進行測試。JMeter將根據組件的生命週期順序執行腳本。例如,它將首先調用PreProcessor而後調用Sampler,而後調用PostProcessor等。可使用具備特定含義和上下文的線程局部變量在這些組件之間傳遞數據。每一個組件都爲您提供可在相應腳本中使用的預約義變量。分佈式
下表顯示了BeanShell組件使用的一些常見變量:函數
變量名 | 描述 |
---|---|
ctx |
它包含有關包含採樣器及其結果的當前線程的上下文信息。 |
vars |
這是存儲在同一線程中BeanShell組件使用的映射中的線程局部變量集。 |
props |
這些變量做爲屬性從存儲在類路徑中的外部文件(jmeter.properties)加載。 |
prev |
它保留了採樣器的最後結果 |
data |
它保存服務器響應數據 |
咱們如今將演示在JMeter中使用BeanShell。咱們將採用一個簡單的排序數組的測試用例。咱們將定義以隨機順序存儲的5個字母(a,b,c,d,e)的數組。咱們將對數組的內容進行排序並將其轉換爲字符串。轉換後,咱們將刪除不須要的字符並打印最終的字符串值。它應該輸出'abcde'。
咱們將使用如下BeanShell組件來實現咱們的測試用例:
在安裝JMeter以前,請確保已安裝JDK 1.6或更高版本。使用此處的連接下載最新版本的JMeter 。在撰寫本文時,JMeter的當前版本是2.13。要安裝,只需將存檔解壓縮到您但願安裝JMeter的主目錄中。將JAVA_HOME環境變量設置爲指向JDK根文件夾。解壓縮歸檔後,導航到<JMeter_Home> / bin文件夾並運行該命令jmeter
。對於Windows,您可使用命令窗口運行。這將打開JMeter GUI窗口,容許您構建測試計劃。
在這個組件中,咱們將對數組進行排序。但在咱們對數組進行排序以前,須要對其進行初始化。在建立預處理器組件時,您將在下一節中看到初始化例程。咱們首先建立BeanShell Sampler組件。咱們將編寫代碼以在初始化例程以後對數組進行排序。右鍵單擊Single User ThreadGroup並選擇Add - > Sampler - > BeanShell Sampler。
咱們將採樣器的名稱提供爲「陣列分類器」。所述復位解釋字段值被保留爲「假」。只有在配置了多個BeanShell採樣器或者在循環中運行採樣器時,才須要此字段。true的值將重置併爲每一個採樣器建立一個新的BeanShell解釋器實例。false的值將只建立一個BeanShell解釋器,它將解釋全部已配置採樣器的腳本。從性能角度來看,若是長時間運行帶有多個採樣器的腳本,建議將此字段設置爲true。該參數field容許您將參數傳遞給BeanShell腳本。它一般與外部BeanShell腳本文件一塊兒使用,但若是您在此組件自己中編寫腳本,則可使用Parameters
或bsh.args
變量來獲取參數。該Parameters
變量將保持的參數做爲字符串值(保留空格)。該bsh.args
變量將參數保存爲字符串數組。對於此示例,咱們不會將任何參數傳遞給腳本。該腳本文件,當你有一個外部文件中定義的腳本的BeanShell領域被使用。須要注意的是,這將覆蓋在此組件中內聯編寫的任何腳本。咱們將保留全部BeanShell組件的全部上述字段的默認值。最後的劇本textbox字段容許咱們在此組件自己內聯編寫腳本。它容許您在腳本中使用某些變量。如您所見,此字段中目前沒有腳本代碼。咱們將在預處理器組件中初始化數組後編寫代碼。
Beanshell PreProcessor將是您的採樣器以前要執行的第一個組件。它成爲執行初始化例程的良好候選者。咱們將在此組件中初始化要排序的數組。右鍵單擊Array Sorter sampler並選擇Add - > Pre Processors - > BeanShell PreProcessor。
咱們將組件命名爲「Array Initializer」。讓咱們看一下Script文本框字段中的代碼。首先,咱們聲明並初始化名爲的數組strArray
。它是一個鬆散類型的變量。數組的值不是有序的。而後咱們vars
經過調用putObject()
方法使用變量來存儲數組。該vars
變量將可用於屬於此線程的全部BeanShell組件。咱們將vars
在'Array Sorter'採樣器中獲取變量的值並執行排序。在上一節中,咱們建立了'Array Sorter'採樣器,如今咱們將在該採樣器中編寫如下代碼來對數組進行排序。單擊腳本中的Array Sorter sampler textbox字段寫入如下代碼:
首先,咱們使用變量的getObject()
方法獲取數組vars
。而後咱們將使用Arrays
Java類進行排序。sort()
所述類的方法將咱們的數組做爲參數並執行排序。而後咱們經過調用Arrays.toString()
方法將數組轉換爲字符串。Arrays
是JDK提供的實用程序類,用於對數組對象執行某些有用的操做。而後,咱們將經過使用SampleResult
變量將此排序的字符串做爲響應數據。咱們的排序字符串以下所示:[a, b, c, d, e]
。
所述的BeanShell PostProcessor中將去掉沒必要要的字符,如「[]」。該組件將更像一個過濾器。右鍵單擊Array Sorter sampler並選擇Add - > Post Processors - > BeanShell PostProcessor。
咱們將該組件命名爲「Array Filter」。該腳本文本字段包含咱們的字符串剝離沒必要要的字符代碼。若是你還記得,那個字符串是由Array Sorter採樣器存儲爲響應數據的。如今咱們在這裏取使用函數的字符串getResponseDataAsString()
中的prev
變量。接下來,咱們使用類的replace()
方法String
從字符串中去除'[]'和','字符。咱們將該字符串存儲在vars
變量中。BeanShell Assertion組件如今將使用此字符串來斷言最終結果。
使用此組件,咱們將最終結果值斷言爲'abcde'。右鍵單擊Array Sorter sampler並選擇Add - > Assertions - > BeanShell Assertion。
使用該vars
變量,咱們將得到最終的字符串並將其存儲在finalString
變量中。而後咱們經過檢查最終字符串是否包含值'abcde'來斷言,而後將Failure
變量設置爲true並使用FailureMessage
變量提供失敗消息。能夠在啓動JMeter GUI的命令窗口中查看測試執行的輸出。如下是運行測試後的控制檯輸出。
BeanShell腳本語言爲Java語言提供腳本功能。在JMeter中,您可使用不一樣的BeanShell組件來編寫測試腳本並執行相同的操做。每一個組件都配備了有用的變量,能夠在腳本中使用這些變量來執行控制流程。腳本功能爲JMeter測試工具添加了強大而實用的維度。本文的目的是展現常見Beanshell組件的用法以及如何編寫測試腳原本執行測試。