1. 程式人生 > >Beanshell vs JSR223 vs Java JMeter腳本:性能關閉你一直在等待!

Beanshell vs JSR223 vs Java JMeter腳本:性能關閉你一直在等待!

得到 但是 r.java 沙盒 jpg rms 快速 分享圖片 儀表

有幾個選項可用於執行自定義JMeter腳本並擴展基線JMeter功能。查看最流行的擴展機制,比較性能並分析哪一個是最好的。

這是樂隊之戰,JMeter風格。

Beanshell V. JSR223 V. Java Request Sampler

在我們之前的帖子中, JMeter Performance和Tuning Tips 由fantastik Philipe Mouwad編寫) 我們建議使用JSR 223 + Groovy進行腳本編寫。這是最好的選擇,因為Groovy腳本可以編譯成本機Java代碼(假設滿足一些要求),因此Groovy腳本執行性能幾乎與Java代碼一樣快。


因此,如果你準備使用一次腳本,快速臟(例如在測試開始時閱讀配置文件),歡迎使用Beanshell / Javascript /無論你喜歡什麽。

但是,如果您要通過腳本進行一些廣泛的負載測試(即從計算數據構建大量HTTP請求),則需要考慮Groovy或自定義Java請求或JMeter Sampler。

為了進行比較,我們將使用相同的簡單代碼生成1Mb隨機字母數字字符串。

技術分享圖片技術分享圖片

比較指標將使用10個用戶x 100次叠代收集,會話持續時間為1小時(標準BlazeMeter會話長度),負載生成將通過執行上述代碼從單個JMeter控制臺完成,並演示以下引擎的關鍵性能指標:

  • Beanshell(原樣)

  • JSR223(Groovy作為語言,啟用了編譯緩存)

  • Java(作為JMeter Java Request Sampler)

在負載生成器端包含相關的CPU / RAM成本(BlazeMeter控制臺)

測試將使用以下環境:

  • 測試類型 - JMeter測試(沙盒)

  • 線程 - 每個線程組10個線程

  • 服務器類型 - 大

  • 會話時間 - 1小時

  • 引擎 - 僅限控制臺

  • 服務器 - 1

  • 每個引擎的線程 - 10

  • 加速 - 沒有加速

  • 叠代 - 100

  • 服務器操作系統 - Linux

  • 服務器CPU - 2x

  • Java 7 x64 1.7.0_03

  • JVM參數 - -server -Xms3072m -Xmx6144m -XX:NewSize = 64m -XX:MaxNewSize = 128m -XX:MaxTenuringThreshold = 2 -Dsun.rmi.dgc.client.gcInterval = 600000 -Dsun.rmi.dgc.server.gcInterval = 600000 -XX:PermSize = 64m -XX:MaxPermSize = 64m

Beanshell采樣器

組態

對於Beanshell,不需要先決條件,一切都可以開箱即用。我們所需要做的就是添加一個Beanshell Sampler並粘貼1Mb隨機字符串生成代碼。將測試腳本上傳到BlazeMeter的測試儀表板並設置適當的線程,叠代和持續時間後,我們得到以下結果:

加載測試結果

技術分享圖片技術分享圖片

JSR233采樣器

組態

如上所述,對於腳本,建議使用JSR233 + Groovy。JMeter不附帶Groovy,需要單獨下載。開始:

  1. Groovy網站下載下載最新的groovy二進制包

  2. 在“embeddable”分發文件夾下找到groovy-all - $ {VERSION} .jar並將其放到JMeter / lib文件夾中。或者將其上傳到“文件”區域中的BlazeMeter,BlazeMeter會將其放入相應的位置

  3. 將JSR233 Sampler添加到Thread Group,將“groovy”指定為Language

  4. 將編譯緩存鍵設置為唯一的

  5. 將1Mb隨機字符串生成代碼粘貼到腳本區域

重要提示:

? 使用.groovy文件而不是將Groovy代碼保留在采樣器中。但是,如果需要在采樣器中直接使用代碼,請確保已設置編譯緩存密鑰。如果您有> 1 JSR233 Sampler - 請確保它們使用不同的密鑰

? 不要在Groovy腳本中將任何變量引用為$ {VAR}。使用vars.get(“VAR”)或JSR233 Sampler的Parameters節

加載測試結果

技術分享圖片技術分享圖片

Java請求

組態

Java Request是您自己的JavaSamplerClient實現,所有描述的方法都應該有適當的代碼。絕對最小值是runTest()方法的覆蓋,但如果您打算參數化Java Request,則需要提供適當的邏輯來讀取輸入和請求流的條件解釋,以確定Sampler是否通過。

通過Java Request生成1Mb隨機字符串的示例代碼如下所示:

技術分享圖片技術分享圖片

編譯類需要放在JMeter安裝的/ lib / ext文件夾中,最好是.jar形式,這樣JMeter可以自動拾取它,否則你需要修改JMeter類路徑。

使用BlazeMeter時,只需將.jar文件與您的腳本和其他擴展程序(如果有的話)一起上傳,BlazeMeter引擎就會將其取出。

2013/12/05 11:09:38 INFO - BlazeMeter:BlazeMeter啟動腳本完成

2013/12/05 11:09:39 INFO - jmeter.protocol.java.sampler.JavaSampler:創建的類:com.blazemeter.JavaRequest

加載測試結果

技術分享圖片技術分享圖片

結論

技術分享圖片技術分享圖片

建議將Beanshell用於一次性活動,例如在單線程setUp線程組中的某處讀取配置文件,或者在不存在使用替代方法的情況下。

JSR233 / Groovy是腳本編寫的合理選擇,但只有“編譯”功能。

獲勝者是......... Java Request,提供卓越的性能和前沿的生產力!

Beanshell vs JSR223 vs Java JMeter腳本:性能關閉你一直在等待!