Jmeter(二十)Beanshell or JSR223

有關Beanshell和JSR223組件的部分,早就想寫一大篇幅隨筆進行記錄,苦於不知如何去描述這兩部分的內容,一直在修改隨筆。java

介紹一下Beanshell:shell

     Beanshell是輕量級Java,支持對象式的腳本語言特性,亦可嵌入到JAVA源代碼中,能動態執行JAVA源代碼併爲其擴展了腳本語言的一些特性,像JavaScript和perl那樣的弱類型、命令式、閉包函數等等特性都不在話下。(飛昇傳送門:http://www.beanshell.org/)閉包

Beanshell在Jmeter有着至關強的地位,被稱之爲Jmeter腳本語言的King。不過前段時間在Blazemeter中看到一篇文章----《IS Beanshell Dead?》,仔細閱讀了一番,其大體之意即是自Jmeter3.1以來,JSR223的腳本語言對Groovy的默認化,相對於Beanshell,開發人員更爲喜歡Groovy;不過對於咱們來講,究竟是選擇Beanshell仍是Groovy?現階段我以爲不必討論這樣的話題。不過我認爲適當的轉變是有必要的,盲目跟風那絕對是大忌!有興趣的能夠去看看,究其根本緣由是什麼。金庸老爺子是這樣描述獨孤求敗:草木竹石都可爲劍。自此精進,漸入無劍勝有劍之境。劍神不是劍法有多高超,而是功力太深厚,草木竹石皆可爲劍!Beanshell、Groovy皆可爲劍!哈哈,看看Jmeter中的Beanshell和JSR223以及它們所能實現的功能吧!dom

首先,Beanshell和JSR223組件是涉及代碼部分的組件,至於用途,能量所在來進行一一記載:函數

  Beanshell和JSR223幾乎在Jmeter的每部分都有涉及到:測試

    一、Sampler加密

    二、PreProcessor線程

    三、PostProcessor3d

    四、Timers日誌

    五、Assertions

    六、Listeners

那麼先添加一個Beanshell Sampler:

  

  圖上標註了五部份內容,幾乎除了名稱和註釋之外的全部部分,都是十分重要的內容。來進行一一解讀:

  先貼官方文檔:

  

  Rest bsh.Interpreter before each call:(check box)不作解釋,具體見官方文檔中給出的示例(或轉Best Practices - Beanshell seripting)

  Parameters(String Parameters and String 【】bah.args):傳遞參數,可將GUI腳本中建立的Parameters參數傳遞至Beanshell腳本中。在Beanshell腳本中引用是使用bsh.args【x】進行實例化。

  Script file:導入Beanshell腳本運行文件。文件名存儲在腳本變量名中。

  Script:腳本編寫處。(Beanshell語法)

  而最下方的一段話,我是特地框了起來,不少人可能會忽略,可是這段話中列舉的變量即是爲Beanshell腳本定義的:

    SampleResult, ResponseCode, ResponseMessage, IsSuccess, Label, FileName, ctx, vars, props, log

  用過的人確定都很熟悉這裏邊的變量,具體用途同名一致!

  OK、上個簡單的例子(該Demo來自Blazemeter的示例,你們有興趣能夠去看看):

  

  使用隨機函數Random做爲一個隨機響應數據。

  

  將Dummy Sampler的響應結果以及響應數據保存至「Response_data」變量中。

  添加Beanshell Sampler進行使用該變量:

  

  將Response_data的變量信息打印至日誌;

  將Label打印至日誌;

  定義該Sampler的響應狀態碼以及響應信息。

  爲直觀,添加一個Debug Sampler查看變量讀取狀況:

  

  響應的隨機數爲56

  

  在上方的Beanshell Sampler定義的Response Code和message。

  

  Debug Sampler的變量讀取是正確的。

  

  日誌面板中打印出的Response data以及Label名稱。

  固然邏輯判斷和引入外部jar包在有必要的狀況下依然是支持的。

  一個將數據寫入文件的小Demo:

    

  判斷目錄下有沒有該文件(此處默認爲/bin目錄下),若是存在,將其刪除掉,建立新的文件

  

  Dummy Sampler自定義寫入request和response信息。(涉及函數__UUID、__iterationNum)

  

  將該響應信息中id、name、password提取出來,定義爲新的變量。

  

  將提取出來的數據寫入該文件中。

  OK,我已經運行過一遍了,看看寫入數據是否成功。

  

  個人/bin目錄下是生成了該文件,打開數據是否寫入:

  

  能夠看到是寫入成功了。

  Setup Group Thread中作建立文件和數據寫入工做。

  bzm - Concurrency Thread Group----------該線程組大體就是一個測試setup線程組中的數據過程。

  

  該線程組下進行以參數化的方式讀取生成的文件:

  

  

  OK,Beanshell幾乎用於處理複雜業務邏輯,例如生成隨機手機號碼、隨機身份證號、加密、解密等業務。其靈活之處更在於能夠實例化外部java文件。

相關文章
相關標籤/搜索