0

我有一个问题,在那里我看到了很多关于此的问题和答案,但到目前为止对我没有任何帮助。

请阅读到最后,看看它不是重复的帖子

我正在使用 2 个使用 cookie 的线程组。由于 cookie 没有在线程组之间共享,我使用该方法将它们“导出”到属性中,并使用 CookieManager 的 coookie 类将它们“导入”回 2ns 线程组中。我在第一个和第二个线程组上放置了相同的 http 请求。显然它在第一个工作,但在第二个,我看到它使用[no cookies]

测试结构如下:

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 个用户并行运行相同的请求。

无论我对有关该主题的许多其他帖子进行的任何测试都没有奏效。

请问有什么想法吗?

4

1 回答 1

1

您的问题很可能是您在创建新的 cookie 实例时没有提供“域”,您需要传递与您的应用程序在测试位置匹配的域(您在HTTP的“服务器名称或 IP”部分中拥有的内容)请求采样器),即如果您是负载测试http://example.com域,.example.com则在您通过 Beanshell 创建 cookie 时提供

一般来说,如果您复制 cookie 名称和值,您也可以复制所有剩余的属性。有关示例代码,请参阅如何使用 BeanShell:JMeter 最喜欢的内置组件

其他增强功能:

  1. 替换${COOKIE_.ASPXAUTH}vars.get("COOKIE_.ASPXAUTH");
  2. 下面的行可以删除,它们不是必需的,Beanshell PreProcessor 已经有sampler预定义的变量

    import org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy;
    HTTPSamplerProxy sampler = ctx.getCurrentSampler();
    
于 2017-01-18T17:21:22.237 回答