【发布时间】:2017-12-09 08:16:38
【问题描述】:
我想使用同一个会话并行执行一些 jmeter 线程组请求。为此,我创建了一个 setUp 线程组,该线程组对 JSESSIONID cookie(以及其他数据)进行身份验证并将其写入 CSV 文件。然后,后续线程组将使用该文件,以允许它们使用这些已经过身份验证的会话。 为此,我基本上遵循此处列出的解决方案:http://theworkaholic.blogspot.co.uk/2013/03/sharing-session-ids-across-threads.html。
setUp 线程组正在按预期验证和生成 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,以重定向到登录页面。这与在 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 没有被识别?
【问题讨论】:
标签: session cookies jmeter session-cookies jsessionid