【JMeter】Groovy和BeanShell腳本的性能比較(轉)

比較完常見後置處理器的性能以後,又順便比較了下GroovyBeanShellhtml

2者都是基於JVM的腳本語言,2者都能直接用Java的語法和類庫java

這些國外網站都推薦用Groovy:shell

http://jmeter.apache.org/usermanual/best-practices.html數據庫

http://www.ubik-ingenierie.com/blog/magento-performance-toolkit-and-jmeter-best-practices/apache

https://blazemeter.com/blog/beanshell-vs-jsr223-vs-java-jmeter-scripting-its-performancepost

由於JMeter支持的一堆腳本語言裏,只有它有預編譯性能

 

關於jmeter的中文網站裏提到groovy的不多,不知有人比較過預編譯帶來的速度提高有多大沒測試

正好閒着來試一下網站

 


環境:jmeter 2.1三、JDK 1.8u7三、JVM參數歷來沒動過、win 10 prospa

 

在項目裏我就是直接上Groovy的,能夠用現成的腳原本測試 :)

生成隨機手機號的腳本,註釋就不截了

提取到另外一個腳本的公用方法,無關的也不截了

爲了效率,用了靜態編譯(性能比較見這裏

每當這腳本有改動,要用groovyc從新編譯(生成的class文件跟java同樣,用jad反編譯就能看到java代碼)

其餘腳本引用的就是這個class文件

scripts目錄加入了jmeter的properties文件裏,因此哪裏都能引用到這文件

 

爲了測試,建立個beanshell腳本文件,就是文本文檔把後綴改成.bsh

不知道beanshell風格是怎樣,直接套java語法

如今2邊作的事是同樣的,beanshell腳本還少幾回調用

 


 

 

咱們進JMeter,建好以下的測試計劃:

暫時用不着的組件先ctrl + t禁用掉

 

先測試最簡單的hello world,採樣器配置以下:

* 要先下載安裝groovy,安裝目錄下找到embeddable文件夾,把groovy-all-2.x.x.jar拷到jmeter安裝目錄下的lib文件夾下

而後重啓jmeter才能在jsr223的菜單裏看到groovy的選項

* cache key隨便寫點什麼,保證惟一就行。直接在下面寫腳本時須要寫上cache key纔有預編譯

 

重啓jmeter,運行測試1次,看到jmeter的命令行窗口裏有了正確的輸出

然而2邊都慢得離譜,尤爲是groovy慢得嚇死人

清掉記錄再來,預熱以後好看點了

以後n次都差很少,groovy歷來沒低於10毫秒

 

一個hello world都比beanshell慢3~十幾倍,這能用嗎?

咱們看看拿正經的腳本,跑足夠多的次數會怎樣


 

 

首先2個採樣器的設置以下:

就是填腳本文件的路徑和傳個變量名給腳本,沒啥特別

值得注意的是groovy只要使用了外部腳本文件就有預編譯,這時不用填cache key

 

用1個線程循環1次調試經過

 

修改線程組設置爲:10個線程,1秒集結(0.1秒來1個),持續60秒,無啓動延遲

ctrl + t禁用無關的組件(變灰那些),注意關掉全部監聽器,由於接下來要用命令行運行,留着它們會拖累吞吐率

 

關掉界面,用命令行跑測試,結果以下:

BeanShell

 

再進界面改爲用jsr223採樣器,等爆表的cpu內存佔用率回落後再跑,結果以下:

Groovy

留意summary + 的那幾行,groovy一開始特別慢,請求耗時的最大值嚇死人,以後減小了10倍,最終結果就是

3倍速!

沒什麼好說的,選Groovy就對了(並且Gradle和Jenkins也用獲得它)

 

 


 

PS:

上述測試保存報告文件爲csv格式,使用以下設置

大部分數據在這裏都用不上,關到剩下最精簡的幾個

若是用一般的設置,報告文件估計要大5倍不止

就剩4列,彷佛無法再少了

留意耗時最長的通常都是前幾回,以後就快了,統計時忽略開頭某段時間的數據就好

 

又PS:

上面的生成手機號的腳本是給接口測試用的,性能測試就別當場生成了

先搞好幾十萬個塞進數據庫或csv文件慢慢用吧

相關文章
相關標籤/搜索