2017-01-18 28 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 *”。但仍然不工作:( –