2014-07-21 34 views
1

我有一個jMeter項目,我正在處理各種各樣的問題。主要是由於在整個運行期間存儲和確定可變數據的範圍。jMeter - 初始化文件中的Beanshell bsh.shared hashmap數據?

我現在已經有了很多工作,我正在使用Beanshell共享散列表來存儲運行中的數據。由於我這樣做,我不需要擔心線程安全。

它可以工作,但每次運行線程組時都會重新初始化自身。儘管將初始化步驟放在所有線程組之外。

因此,據我所知,解決方案是將所有啓動數據放入初始化文件,該文件僅在啓動時運行一次。但我無法弄清楚我應該怎麼做?我將之前使用的Beanshell預處理器中的代碼複製到「.bshrc」文件中,並使用我的「.bshrc」文件的位置更新了jMeter屬性文件,但它似乎不起作用。它實際上並沒有做任何事情。當我運行測試時,沒有值存在,並且一切都失敗。

我已經嘗試使用:

beanshell.init.file = .. /斌/ data.bshrc 和 beanshell.preprocessor.init = .. /斌/ data.bshrc

我試圖找到一些白癡指南來設置init文件,但我找不到任何有用的東西。這是我第一次不得不非常認真地使用Beanshell,而我的Java知識充其量也是非常有限的!

目前,通過在啓用原始Beanshell預處理器的情況下運行我的測試一次,我就可以得到它。這設置了hashmaps,並從那裏留在記憶中。我停止了這個運行,禁用了預處理器,並且所有後續運行都很順利。

有人嗎?

回答

3

我會建議使用正被之前的任何其他線程組執行setUp Thread Group,並用BeanShell的採樣有這樣定義

bsh.shared.myMap = new java.util.HashMap(); 
bsh.shared.myMap.put("foo","bar"); 
// any other operations 

之後,在你的主線程組(S)你的測試數據,您可以訪問myMap值在任何已啓用BeanShell的測試元件(取樣器,前置/後置處理器,斷言)作爲

log.info("foo = " + bsh.shared.myMap.get("foo")); 

2014年7月22日10時06分48秒INFO - jmeter.util.BeanShellTestE lement:foo = bar

請參閱How to use BeanShell: JMeter's favorite built-in component有關Apache JMeter中的Beanshell腳本和Beanshell食譜的更多詳細信息的指南。

如果您使用Beanshell進行「繁重」操作,那麼我建議您考慮切換到JSR223 SamplerGroovy language,因爲在這種情況下,您將獲得與本地Java代碼相媲美的性能。

+0

是的。這正是我在昨天發佈這個消息後不久就改變了它。它工作得很好。但是外部文件會更容易處理,所以我仍然想要使初始化文件起作用。我知道它可以完成,我只是不知道如何設置它。我只是真的不得不使用Beanshell的東西,所以我可以通過多個線程組訪問共享數組。作爲測試設置的方式,不需要線程安全,一個線程組將永遠不會使用另一個正在使用的實例。但是如果我擁有一個集中的數據池,它使得它更具可擴展性。因此陣列。 – ColinMcC