JMeter BeanShell示例

翻譯:https://blog.trigent.com/jmeter-blog-series-jmeter-beanshell-example正則表達式

在這個例子中,咱們將演示在Apache JMeter中使用BeanShell組件。咱們將使用BeanShell腳本語言編寫一個簡單的測試用例。這些腳本將成爲咱們將爲此示例配置的BeanShell組件的一部分。在咱們看看不一樣BeanShell組件的用法以前,讓咱們來看看這個概念。shell

1.簡介

Apache JMeter是一個基於Java的開源工具,使您能夠對應用程序執行功能,負載,性能和迴歸測試。應用程序可能在Web服務器上運行,也多是獨立的。它支持在包含靜態和動態資源的客戶端 - 服務器和Web模型上進行測試。它支持各類用於進行測試的協議,包括HTTP,HTTPS,JDBC,FTP,JMS,LDAP,SOAP等。數據庫

快速瀏覽一些功能:apache

  • 它提供了一個全面的基於GUI的工做臺來玩測試。它還容許您在非GUI模式下工做。JMeter也能夠移植到服務器上,容許在分佈式環境中執行測試。
  • 它提供了模板概念,它是針對各類方案或協議的預約義測試計劃,可直接用於建立所需的測試計劃。
  • 它使您可以使用諸如線程組,控制器,採樣器,監聽器等強大功能在結構上構建測試計劃。
  • 它經過有效的日誌記錄提供調試和錯誤監控。
  • 它經過變量的概念支持參數化測試。
  • 它支持建立不一樣風格的測試計劃,包括Web,數據庫,FTP,LDAP,Web服務,JMS,監視器等。
  • 它容許經過將不一樣的JMeter實例做爲跨節點的服務器運行並從單個客戶端應用程序訪問來進行遠程測試。
  • 它爲您提供實時測試結果,涵蓋延遲,吞吐量,響應時間,活動線程等指標。
  • 它使您可以基於正則表達式和許多其餘功能執行測試。

1.1。什麼是BeanShell?

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服務器

1.2。JMeter Beanshell組件

JMeter提供瞭如下可用於編寫BeanShell腳本的組件閉包

  • BeanShell採樣器
  • BeanShell預處理器
  • BeanShell PostProcessor
  • BeanShell斷言
  • BeanShell監聽器
  • BeanShell計時器

這些組件中的每個都容許您編寫腳原本進行測試。JMeter將根據組件的生命週期順序執行腳本。例如,它將首先調用PreProcessor而後調用Sampler,而後調用PostProcessor等。可使用具備特定含義和上下文的線程局部變量在這些組件之間傳遞數據。每一個組件都爲您提供可在相應腳本中使用的預約義變量。分佈式

 

下表顯示了BeanShell組件使用的一些常見變量:函數

變量名 描述
ctx 它包含有關包含採樣器及其結果的當前線程的上下文信息。
vars 這是存儲在同一線程中BeanShell組件使用的映射中的線程局部變量集。
props 這些變量做爲屬性從存儲在類路徑中的外部文件(jmeter.properties加載
prev 它保留了採樣器的最後結果
data 它保存服務器響應數據

2. BeanShell示例

咱們如今將演示在JMeter中使用BeanShell。咱們將採用一個簡單的排序數組的測試用例。咱們將定義以隨機順序存儲的5個字母(a,b,c,d,e)的數組。咱們將對數組的內容進行排序並將其轉換爲字符串。轉換後,咱們將刪除不須要的字符並打印最終的字符串值。它應該輸出'abcde'。
咱們將使用如下BeanShell組件來實現咱們的測試用例:

  • BeanShell PreProcessor - 該組件將定義或初始化咱們的數組。
  • BeanShell Sampler - 該組件將對數組進行排序並將其轉換爲字符串。
  • BeanShell PostProcessor - 該組件將從字符串中刪除沒必要要的字符。
  • BeanShell斷言 - 該組件將斷言咱們的測試結果(帶有排序內容的字符串)。

在安裝JMeter以前,請確保已安裝JDK 1.6或更高版本。使用此處的連接下載最新版本的JMeter 在撰寫本文時,JMeter的當前版本是2.13。要安裝,只需將存檔解壓縮到您但願安裝JMeter的主目錄中。JAVA_HOME環境變量設置爲指向JDK根文件夾。解壓縮歸檔後,導航到<JMeter_Home> / bin文件夾並運行該命令jmeter對於Windows,您可使用命令窗口運行。這將打開JMeter GUI窗口,容許您構建測試計劃。

2.1。配置BeanShell採樣器

在這個組件中,咱們將對數組進行排序。但在咱們對數組進行排序以前,須要對其進行初始化。在建立預處理器組件時,您將在下一節中看到初始化例程。咱們首先建立BeanShell Sampler組件。咱們將編寫代碼以在初始化例程以後對數組進行排序。右鍵單擊Single User ThreadGroup並選擇Add - > Sampler - > BeanShell Sampler

JMeter的-BeanShell的sampler1

咱們將採樣器的名稱提供爲「陣列分類器」。所述復位解釋字段值被保留爲「假」。只有在配置了多個BeanShell採樣器或者在循環中運行採樣器時,才須要此字段。true的值將重置併爲每一個採樣器建立一個新的BeanShell解釋器實例。false的值將只建立一個BeanShell解釋器,它將解釋全部已配置採樣器的腳本。從性能角度來看,若是長時間運行帶有多個採樣器的腳本,建議將此字段設置爲true。參數field容許您將參數傳遞給BeanShell腳本。它一般與外部BeanShell腳本文件一塊兒使用,但若是您在此組件自己中編寫腳本,則可使用Parametersbsh.args變量來獲取參數。Parameters變量將保持的參數做爲字符串值(保留空格)。bsh.args變量將參數保存爲字符串數組。對於此示例,咱們不會將任何參數傳遞給腳本。腳本文件,當你有一個外部文件中定義的腳本的BeanShell領域被使用。須要注意的是,這將覆蓋在此組件中內聯編寫的任何腳本。咱們將保留全部BeanShell組件的全部上述字段的默認值。最後的劇本textbox字段容許咱們在此組件自己內聯編寫腳本。它容許您在腳本中使用某些變量。如您所見,此字段中目前沒有腳本代碼。咱們將在預處理器組件中初始化數組後編寫代碼。

2.2。配置BeanShell預處理器

Beanshell PreProcessor將是您的採樣器以前要執行的第一個組件。它成爲執行初始化例程的良好候選者。咱們將在此組件中初始化要排序的數組。右鍵單擊Array Sorter sampler並選擇Add - > Pre Processors - > BeanShell PreProcessor

JMeter的-BeanShell的preprocessor2

咱們將組件命名爲「Array Initializer」。讓咱們看一下Script文本框字段中的代碼首先,咱們聲明並初始化名爲的數組strArray它是一個鬆散類型的變量。數組的值不是有序的。而後咱們vars經過調用putObject()方法使用變量來存儲數組vars變量將可用於屬於此線程的全部BeanShell組件。咱們將vars在'Array Sorter'採樣器中獲取變量的值並執行排序。在上一節中,咱們建立了'Array Sorter'採樣器,如今咱們將在該採樣器中編寫如下代碼來對數組進行排序。單擊腳本中的Array Sorter sampler textbox字段寫入如下代碼:

JMeter的-BeanShell的採樣-3-

首先,咱們使用變量的getObject()方法獲取數組vars而後咱們將使用ArraysJava類進行排序sort()所述類方法將咱們的數組做爲參數並執行排序。而後咱們經過調用Arrays.toString()方法將數組轉換爲字符串Arrays是JDK提供的實用程序類,用於對數組對象執行某些有用的操做。而後,咱們將經過使用SampleResult變量將此排序的字符串做爲響應數據咱們的排序字符串以下所示:[a, b, c, d, e]

2.3。配置BeanShell PostProcessor

所述的BeanShell PostProcessor中將去掉沒必要要的字符,如「[]」。該組件將更像一個過濾器。右鍵單擊Array Sorter sampler並選擇Add - > Post Processors - > BeanShell PostProcessor

JMeter的-BeanShell的postprocessor14

咱們將該組件命名爲「Array Filter」。腳本文本字段包含咱們的字符串剝離沒必要要的字符代碼。若是你還記得,那個字符串是由Array Sorter採樣器存儲爲響應數據的如今咱們在這裏取使用函數的字符串getResponseDataAsString()中的prev變量。接下來,咱們使用replace()方法String從字符串中去除'[]'和','字符。咱們將該字符串存儲在vars變量中。BeanShell Assertion組件如今將使用此字符串來斷言最終結果。

2.4。配置BeanShell斷言

使用此組件,咱們將最終結果值斷言爲'abcde'。右鍵單擊Array Sorter sampler並選擇Add - > Assertions - > BeanShell Assertion

JMeter的-BeanShell的斷言

使用該vars變量,咱們將得到最終的字符串並將其存儲在finalString變量中。而後咱們經過檢查最終字符串是否包含值'abcde'來斷言,而後將Failure變量設置爲true並使用FailureMessage變量提供失敗消息能夠在啓動JMeter GUI的命令窗口中查看測試執行的輸出。如下是運行測試後的控制檯輸出。

JMeter的-BeanShell的output16

3.結論

BeanShell腳本語言爲Java語言提供腳本功能。在JMeter中,您可使用不一樣的BeanShell組件來編寫測試腳本並執行相同的操做。每一個組件都配備了有用的變量,能夠在腳本中使用這些變量來執行控制流程。腳本功能爲JMeter測試工具添加了強大而實用的維度。本文的目的是展現常見Beanshell組件的用法以及如何編寫測試腳原本執行測試。

相關文章
相關標籤/搜索