我想使用相同的会话并行执行一些jmeter线程组请求。为此,我创建了一个setUp线程组,用于验证JSESSIONID cookie(以及其他数据)并将其写入CSV文件。然后,后续线程组将使用此文件,以允许它们使用这些已经过身份验证的会话。 为此,我基本上遵循此处概述的解决方案:http://theworkaholic.blogspot.co.uk/2013/03/sharing-session-ids-across-threads.html。
setUp线程组正在验证并按预期生成CSV文件。但是,我无法在后续线程组中获取请求以使用提供的会话。我可以添加JSESSIONID cookie(通过使用BeanShell PreProcessor或使用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,以重定向到登录页面。这与在setUp线程组中成功执行的相同请求相比较:
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 PreProcessor代码是:
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无法识别?
答案 0 :(得分:0)
Cookie范围仅限于当前的线程组。这同样适用于JMeter变量。如果需要在不同的线程组之间传递对象,则必须通过bsh.shared namespace或将JMeter变量转换为JMeter属性,这些属性对于整个JVM是全局的。请参阅Knit One Pearl Two: How to Use Variables in Different Thread Groups文章,例如JMeter变量到JMeter属性转换。
答案 1 :(得分:0)
我通过删除BeanShell PreProcessor并使用HTTP Cookie管理器添加cookie,并将“Cookie策略”设置为“标准”(之前设置为“兼容性”)来解决此问题。
答案 2 :(得分:0)
打开jmeter.properties
寻找CookieManager.save.cookies
并将其设置为true
您应该在同一线程组中具有HTTP Cookie Manager
希望有帮助