未识别jmeter请求中的jsessionid cookie集

未识别jmeter请求中的jsessionid cookie集,session,cookies,jmeter,session-cookies,jsessionid,Session,Cookies,Jmeter,Session Cookies,Jsessionid,我想使用同一个会话并行执行一些jmeter线程组请求。为此,我创建了一个安装线程组,用于验证JSESSIONID cookie(以及其他数据)并将其写入CSV文件。随后,该文件将被后续线程组使用,以允许它们使用这些已通过身份验证的会话。 为此,我基本上遵循此处概述的解决方案: 安装线程组正在按预期验证和生成CSV文件。但是,我无法获得后续线程组中使用提供的会话的请求。我可以添加JSESSIONID cookie(可以使用BeanShell预处理器,也可以使用HTTP cookie管理器,两者都会

我想使用同一个会话并行执行一些jmeter线程组请求。为此,我创建了一个安装线程组,用于验证JSESSIONID cookie(以及其他数据)并将其写入CSV文件。随后,该文件将被后续线程组使用,以允许它们使用这些已通过身份验证的会话。 为此,我基本上遵循此处概述的解决方案:

安装线程组正在按预期验证和生成CSV文件。但是,我无法获得后续线程组中使用提供的会话的请求。我可以添加JSESSIONID cookie(可以使用BeanShell预处理器,也可以使用HTTP cookie管理器,两者都会给出相同的结果),但这似乎无法识别。正在发送的请求如下所示:

POST https://test.mydomain.com:8443/prv/p/getUploadedfiles.action

POST data:
start=0&limit=10&sort=createdDate&dir=DESC&days=6

Cookie Data:
$Version=1; JSESSIONID="D0720DD3B06B5752DF6AC83A1B245EDA"; $Path="/"; 
$Domain="test.mydomain.com"

Request Headers:
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 49
Host: test.mydomain.com:8443
User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_121)
此请求的返回状态为302,以重新指向登录页面。这与在安装线程组中成功执行的相同请求相比:

POST https://test.mydomain.com:8443/prv/p/getUploadedfiles.action

POST data:
start=0&limit=10&sort=createdDate&dir=DESC&days=6

Cookie Data:
JSESSIONID=D0720DD3B06B5752DF6AC83A1B245EDA

Request Headers:
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 49
Host: test.mydomain.com:8443
User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_121)
请求之间的唯一区别似乎是在cookie数据上显式设置的$Version、$Path和$Domain。[有趣的是,上面链接中的解决方案中的“Cookie数据”似乎是正确的,我的意思是在请求输出中不包含$Version、$Path或$Domain] BeanShell预处理器代码为:

import org.apache.jmeter.protocol.http.control.CookieManager;
import org.apache.jmeter.protocol.http.control.Cookie;

Cookie cookie = new Cookie("JSESSIONID", vars.get("jsessionid"), "test.mydomain.com", "/", true, -1);
CookieManager manager = sampler.getCookieManager();
manager.add(cookie);
log.info("Cookie added: " + vars.get("jsessionid"));

有人知道为什么无法识别JSESSIONID cookie吗?

cookie的作用域仅限于当前线程组。这同样适用于JMeter变量。如果需要在不同的线程组之间传递对象,则必须通过或通过将JMeter变量转换为JMeter属性来实现,JMeter属性是整个JVM的全局属性。请参阅文章,例如JMeter变量到JMeter属性的转换

我通过移除BeanShell预处理器并使用HTTP Cookie管理器添加Cookie,并将“Cookie策略”设置为“标准”(以前设置为“兼容性”),解决了这个问题。

打开jmeter.properties 查找
CookieManager.save.cookies
并将其设置为
true
您应该在同一线程组中有一个HTTP Cookie管理器
希望此帮助

我正在从文件中读取cookie值,并使用此值在每个线程组中显式设置,因此这不适用。它现在起作用了(见我的评论)。无论如何,谢谢。请注意,您还可以使用线程间通信预处理器(附加插件)在不同的线程组之间共享对象-这是我的下一个任务!