2011-01-21 85 views
7

我添加了兩個登錄請求來存儲會話ID和另一個請求來檢查需要會話ID的負載測試。我只做了一次登錄請求,將它作爲一次性控制器的子項添加。但是當我通過添加大約100或200個線程來測試它時,登錄也會運行那麼長時間。我想爲僅啓動線程運行登錄請求。可能嗎?下面我添加了我的測試用例層次。是一次只有控制器在Jmeter中運行不止一次?

ThreadGroup: 
Htp requestdefault 
HTTP cookie manager 
    once only controller 
login Http request 
Http request for number of users 

回答

0

您可以將「登錄HTTP請求」放在Once Only控制器和普通的「HTTP請求」中放入迴路控制器中。現在您可以設置循環執行HTTP請求100或200次。請參閱: jmeter.apache.org/usermanual/component_reference.html#Loop_Controller

使用計時器進行更真實的測試。假設您希望在120秒內發生200次請求,那麼您可以將每個請求暫停120/200秒。大多數計時器以毫秒爲單位工作,因此您可以創建該數字(120/200 * 1000)毫秒。請參閱: jmeter.apache.org/usermanual/component_reference.html#timers

您也可以創建一個單獨的安裝線程組,在其中執行登錄並在另一個線程組中執行200個線程。檢查這篇文章: http://www.informit.com/guides/content.aspx?g=java&seqNum=520

所有這些信息應該幫助你在正確的方向。祝你好運!

+0

我想一次發送所有的請求,如果我把「正常的HTTP請求」迴路控制器內,然後每個請求將由一個完成第一隻請求它會之後,這意味着執行一個從第二個開始。所以我無法找到有多少請求會導致連接崩潰。而且我還有一個疑問,就是一旦只有控制器,並且我仍然無法理解Once Only控制器的功能。在我的測試案例中,它運行於我在線程組中提到的所有線程。它僅對測試用例運行一次對?。請幫助您解決這個問題 – prashant 2011-01-21 11:52:06

21

「ONLY ONCE」控制器無法按照您認爲的方式工作。

它每分鐘只運行一次。因此,如果你有100個線程,它將運行100次。

如果你想讓它每次測試運行一次,請執行下列操作:

Test Plan (Set thread groups to "run consecutively" 
- Cookie Manager 
- Thread Group A (1 thread, 1 loop) 
- - - Login Logic 
- Thread Group B 
- - - Rest of test 

請注意,如果您需要共享線程組A和B之間的任何變量,你需要將它們設置爲屬性。變量不能在線程組之間共享,但屬性可以。你需要使用屬性功能。

函數__setProperty自動將該值存儲爲全局變量。啓動__Property的最簡潔方法是創建POST處理器Beanshell腳本作爲在THREAD A中創建cookie的採樣器的子元素。要檢索THREAD B中的值,需要將__property函數添加爲參數的VALUE需要cookie值。

BeanShell的腳本會是這個樣子:

props.put("COOKIENAME","COOKIEVALUE"); //creates a property "COOKIENAME" with value "COOKIEVALUE" 
print(props.get("COOKIENAME")); //prints the value out to the console 

上面的代碼總是有COOKIENAME相同的值,小於想法。所以,我們需要確保「COOKIEVALUE」是動態的。我建議使用POST-PROCESSOR正則表達式來提取cookie值,然後將其傳遞到beanshell腳本中。

所以,我們的測試計劃現在看起來是這樣的:

Test Plan (Set thread groups to "run consecutively" 
- Thread Group A (1 thread, 1 loop) 
- - - Login Logic 
- - - - - Regex to grab cookie, store as "regexCookie" 
- - - - - Beanshell to set property 
- Thread Group B 
- - - Rest of test 

而我們的BeanShell腳本現在的樣子:

props.put("COOKIENAME",vars.get("regexCookie")); //creates a property "COOKIENAME" with value from "regexCookie" 
print(props.get("COOKIENAME")); //prints the value out to the console 

鏈接到用戶手冊:

+0

嘿,非常感謝您的回覆,但我仍然在爲如何存儲和獲取房產價值而苦苦掙扎。你能解釋我在哪裏存儲財產價值,以及如何讓他們在另一個線程。我想存儲來自「線程A」的cookie管理器值並將其存入「線程B」中。 通過使用功能幫助我通過選擇功能_property得到一個字符串,但我越來越困惑在哪裏存儲這個字符串,使其全球。 – prashant 2011-01-24 06:30:51

+1

函數__property將其自動存儲爲全局變量。啓動__setProperty最徹底的方法是創建一個後處理器的BeanShell腳本作爲一個孩子,授予在線程A cookie來檢索線程B的值採樣,您添加__property函數作爲值的參數需要cookie值。希望這可以幫助(編輯原來的反應,以體現這一點) – BlackGaff 2011-02-14 15:58:17

0

只有一次控制器工作BlackGaff解釋的方式。

什麼你正在嘗試做的似乎是錯誤的,因爲這將意味着你有相同的登錄/密碼來驗證你的100個用戶。

但是如果你還是想這樣做,你可以使用setupThread與一個用戶,它是在測試一些初始化任務通常是有用的,但在不意味着它回答您的要求,似乎我錯了。

0

在JMeter中2.9,您可以使用「僅一次控制器」和「迴路控制器」來做到這一點。

這是美好的!

羊羊