Beanshell vs JSR223 vs Java JMeter腳本:性能關閉你一直在等待!
有幾個選項可用於執行自定義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,需要單獨下載。開始:
-
從Groovy網站下載區下載最新的groovy二進制包
-
在“embeddable”分發文件夾下找到groovy-all - $ {VERSION} .jar並將其放到JMeter / lib文件夾中。或者將其上傳到“文件”區域中的BlazeMeter,BlazeMeter會將其放入相應的位置
-
將JSR233 Sampler添加到Thread Group,將“groovy”指定為Language
-
將編譯緩存鍵設置為唯一的
-
將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腳本:性能關閉你一直在等待!