2009-09-07 135 views
46

我們在應用程序中有一個簡單的性能測試流程。Apache JMeter中的會話/ cookie管理

  1. 我們登錄基於某些條件
  2. 不同的參數重複搜索
  3. 搜索。

我們使用Jmeter進行性能測試。我們需要運行多個線程以可擴展的方式來測試它。

我們現在有這樣的排列方式是:

-Test Plan 
    - Thread Group 
     - Cookie Manager 
     - Login To application 
     - Search on param 1 
     - Search on param 2 
    - results summary table 
    - Summary report 

所以基本上我們有摘要返回表,並同時cookie管理器出現在線程組級別的報告出現在計劃水平。

當我運行一個線程它運行良好,並完成。當我將其縮放到多個線程時,只要下一個線程啓動,最後一個線程的會話就會失效。由於新產生的線程,這導致所有已經運行的線程失敗。

我達到了這個結果與觀察:結果概要樹
2.
1.如果我運行多個線程,只有最後一個線程已經得到了有效的反應。如果我有2個線程與斜坡上升週期爲10秒運行,這意味着每個線程都有時間完成自己,然後它們都成功運行。

根據我的理解,每個線程登錄到應用程序,並且由於cookie管理器在線程級別,值將分別維護每個線程的會話ID?但是什麼導致線程之間的會話id值的覆蓋?

任何幫助將不勝感激。

回答

46

從JMeter的文檔複製:

的最後一個元素是一個HTTP Cookie的 管理器。一個Cookie管理器應該被添加到所有網絡測試 - 否則 JMeter會忽略cookie。 通過在線程組級別添加 ,我們 確保所有HTTP請求將 共享相同的cookie。

http://jmeter.apache.org/usermanual/test_plan.html的章節「4.2.2邏輯控制器」。

編輯:我想你應該使用http://jmeter.apache.org/usermanual/component_reference.html#Simple_Controller將您的請求與Cookie管理器一起分組。

1

嘗試增加加速時間。我遇到了同樣的問題,其中加速時間約1秒,然後我將它增加到每個線程3秒,它運行良好。

6

我認爲安德烈的回答是無能爲力的。他引用每個請求都將使用相同的cookies,但根據jmeter手冊:

每個JMeter線程都有自己的「cookie存儲區」。

據我瞭解的問題,你希望每個線程共享相同的會話ID cookie。所以在我看來,你需要有兩個線程組並連續執行它們。第一個線程組(使用一個只能執行一次的單個線程)應該登錄並將會話cookie值保存爲全局參數(可能需要使用jmeter的腳本功能)。 然後在第二個線程組的cookie管理器中設置該cookie。

希望有所幫助。

+2

+1了這一點。 *是否可以通過同一測試計劃的不同線程組「傳播」Cookie? 編號JMeter線程旨在表示獨立用戶,因此Cookie和變量對於線程是本地的。* 根據[this](http://jmeter.512774.n5.nabble.com/HTTP-cookie-manager -td544523.html)。 – 2012-01-17 17:26:44

0

試試這個:

打開user.properties目前在JMeter的

的bin文件夾

編輯,並添加以下行:

CookieManager.check.cookies=false 

保存並運行該腳本。我希望它能解決你的問題。

0

首先改變你的代碼:

jmeter.properties 
CookieManager.save.cookies=true 
CookieManager.name.prefix=mycookie_ 

接下來,相同的線程組中添加一個HTTP cookie管理器爲您的Java採樣。

然後在你的java採樣補充:

JMeterVariables jmv = JMeterContextService.getContext().getVariables(); 
Iterator<Map.Entry<String,Object>> it = jmv.getIterator(); 
while(it.hasNext()){ 
    Map.Entry<String,Object> v = it.next(); 
    System.out.println("name: " + v.getKey() + " value: " + v.getValue()); 
}