2017-01-18 46 views
0

我有一個問題,在這裏我看到很多關於這個的各種任務和答案,但到目前爲止我沒有任何工作。Jmeter將Cookie傳遞給不同的線程組,但仍然通過[沒有Cookie]得到請求

請仔細閱讀文章以查看是否重複的帖子

我正在使用2個正在使用cookie的線程組。由於cookie不是跨線程組共享的,我使用該方法將它們「導出」到屬性中,並使用CookieManager的coookie類將它們「導入」回2ns線程組中。 我在第一和第二個線程組中放置了相同的http請求。很明顯,它在第一個,但在第二,我看到它使用[沒有餅乾]

測試結構如下:

HTTP Cookie Manager 
 
Thread A - 1 thread, 1 loop 
 
- Login page 
 
    - Beanshell PostProcessor 
 
     props.put("ASPXAUTH_Cookie","${COOKIE_.ASPXAUTH}"); 
 
     props.put("ASP.NET_SessionId_Cookie","${COOKIE_ASP.NET_SessionId}"); 
 
    - Page X to hit - success 
 
Thread B - 6 thread, 1 loop 
 
- Login page 
 
    - Beanshell Prerocessor 
 
     import org.apache.jmeter.protocol.http.control.CookieManager; 
 
     import org.apache.jmeter.protocol.http.control.Cookie; 
 
     import org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy; 
 
     HTTPSamplerProxy sampler = ctx.getCurrentSampler(); 
 
     CookieManager manager = sampler.getCookieManager(); 
 
     Cookie cookie1 = new Cookie(".ASPXAUTH",props.get("ASPXAUTH_Cookie"),"","/",false,0); 
 
     manager.add(cookie1); 
 
     Cookie cookie2 = new Cookie("ASP.NET_SessionId",props.get("ASP.NET_SessionId_Cookie"),"","/",false,0); 
 
     manager.add(cookie2); 
 
    - Same Page X to hit - failure

爲頁X初步結果:

GET http://Mysite/pages/MyView.aspx?subRoute=views&pageid=7168&routeName=dashboards 
 

 
Cookie Data: 
 
.ASPXAUTH=9CB09DD7A906ED67027E9B1ED71C707A498B8234C737169AA3EF1164890A217D9CCD1F1B32736338A7DFBF3DE0A07AD45F170A0F11FE49C827581C584577372D2D3C7D4F52DE1B73D3DE9A1263150B85F302DD01B9CF93AF380F5C63F618634CEEB5C3CFD95F1081EC28F5A556B21EAA; ASP.NET_SessionId=rg4dxqm1xai4wovvfvyezggo 
 

 
Request Headers: 
 
Connection: keep-alive 
 
X-DevTools-Emulate-Network-Conditions-Client-Id: 08a74297-b666-496a-a1cb-620054bc5db5 
 
Upgrade-Insecure-Requests: 1 
 
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36 
 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
 
Referer: http://Mysite/pages/ui/ 
 
Accept-Encoding: gzip, deflate, sdch 
 
Accept-Language: he-IL,he;q=0.8,en-US;q=0.6,en;q=0.4,fr;q=0.2 
 
Host: load-rec-8

爲頁X第二結果(這是對第二個線程組):

GET http://Mysite/pages/MyView.aspx?subRoute=views&pageid=7168&routeName=dashboards 
 

 
[no cookies] 
 

 
Request Headers: 
 
Connection: keep-alive 
 
X-DevTools-Emulate-Network-Conditions-Client-Id: 08a74297-b666-496a-a1cb-620054bc5db5 
 
Upgrade-Insecure-Requests: 1 
 
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36 
 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
 
Referer: http://Mysite/pages/ 
 
Accept-Encoding: gzip, deflate, sdch 
 
Accept-Language: he-IL,he;q=0.8,en-US;q=0.6,en;q=0.4,fr;q=0.2 
 
Host: load-rec-8

請不要回答「不使用不同的線程組」,因爲我只使用1點登錄(第一線程組),而第二個線程組應運行相同的請求爲6個用戶同時並行。

無論我做了多少關於此主題的其他帖子的測試都沒有奏效。

有什麼想法嗎?

+0

你肯定ThreadGroup2開始,一旦ThreadGroup1設置cookie的財產? ?如果沒有,你可以推遲threadgroup2,看看它是否有幫助嗎? – vins

+0

@vins,是的,因爲我已經在測試計劃級別連續設置**運行線程組(即一次運行一個組)。 我也添加log.info打印到線程組2,並看到cookie被創建正確... –

回答

0

大多數情況下,您的問題是您在創建新的Cookie實例時不提供「域」,您需要傳遞與您的應用程序在測試位置相匹配的域(您在「服務器名稱或IP」在HTTP Request採樣的部分),也就是說,如果你是負載測試http://example.com域,提供.example.com當你通過BeanShell的

創建的cookie

一般給你複製cookie的名稱和值,你也可以複製所有剩餘的屬性以及。示例代碼見How to Use BeanShell: JMeter's Favorite Built-in Component

其他增強功能:

  1. 更換${COOKIE_.ASPXAUTH}vars.get("COOKIE_.ASPXAUTH");
  2. 以下線路可以刪除,但不是必需的,BeanShell的預處理器已經sampler預先定義的變量

    import org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy; 
    HTTPSamplerProxy sampler = ctx.getCurrentSampler(); 
    
+0

我實際上使用WireShark檢查網絡數據包,並看到使用的域是機器本身 - 它是測試環境,所以我的URL看起來像:** http:// SiteName:80/MySite/... etc ... **,所以當我創建cookie時,我將位置設置爲「/」或甚至「/ MySite」域名我設置了「* SiteName *」。但仍然不工作:( –