2017-03-09 51 views
0

我正在運行從數據庫中抽取的每個用戶帳戶都需要不同線程的腳本。因此,腳本首先運行一個JDBC處理器來獲取所有帳戶並將它們存儲在「帳戶」中(使用「變量名稱」字段)。然後我運行一個BeanShell的預處理器變量「accounts_#」轉換爲一個屬性:屬性在第二次執行之前不會生效

props.put("p_accounts_#",vars.get("accounts_#")); 

然後,我有一個線程組開始。在「線程(用戶)的數量」,我有

${__P(p_accounts_#)} 

FIRST時間我運行此腳本(啓動JMeter的後),我只得到一個單獨的線程。我以後每運行一次,它都會運行所有賬戶。

看起來像是由於某種原因,直到第一次執行結束時纔會保存該屬性。這是一個非常大的問題,因爲當jMeter在沒有UI的情況下啓動時,它每次只會執行一個線程。

我是否正確設置屬性?我也用Beanshell Assertion嘗試過,結果相同。

就像一個測試,我創建了一個新的測試,我需要重現這個最低限度。這是腳本(圖片):http://imgur.com/a/WB5J2

這是一個Beanshell預處理器,帶有「props.put(」accounts「,」12「);」 然後使用「$ {__ P(accounts)}」作爲線程數的線程組 然後在該線程組內部是一個調試採樣器,輸出JMeter屬性。 最後是一個查看結果樹。

當我第一次運行它時,只有一個輸出:「線程1正在運行」。 當我再次運行它時,有12個輸出,「胎面1運行」,「線程2運行」等。

我可以看到,對於兩個調試採樣器(對於第一次運行和第二次運行) 「屬性設置爲12.但是線程組需要在TWICE執行之前執行TWICE。

任何想法?

回答

0

這可以通過添加另一個稱爲'setUp ThreadGroup'的ThreadGroup來包含設置部分來解決。如果將所有登臺步驟放入此類型的線程組,它將在任何其他線程組之前運行。然後,您可以擁有預處理器,或者根據需要將邏輯移至beanshell採樣器,然後從那裏設置屬性。

+0

工作就像一個魅力。我添加了一個新的線程組,將測試計劃中的選項設置爲「連續運行線程組」並使用Beanshell採樣器來設置屬性。看來Beanshell預處理器沒有做任何事情,只是採樣器工作正常。謝謝! – Jer

相關問題