JMeter BeanShell示例


翻譯:https://blog.trigent.com/jmeter-blog-series-jmeter-beanshell-example

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

1.簡介

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

快速瀏覽一些功能:

  • 它提供了一個全面的基於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組件的用法以及如何編寫測試腳本來執行測試。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM