使用JSR223采样器向CookieManager添加Cookie时报无此方法错误
问题解决方案
根因分析
- JSR223采样器的内置变量
sampler对应org.apache.jmeter.protocol.java.sampler.JSR223Sampler类实例,该类本身没有getCookieManager()方法,只有HTTP请求类采样器才会提供该方法,因此会抛出方法不存在的报错。 - 你当前的Cookie构造参数也存在错误:第三个参数应为站点域名,你填写的
nginx/1.20.1是Server响应头值,不符合Cookie规范,即使拿到Cookie管理器也无法正常生效。 - 脚本中使用
${}形式引用JMeter变量在JSR223中存在缓存风险,不建议使用。
修正后完整代码
import org.apache.jmeter.protocol.http.control.CookieManager; import org.apache.jmeter.protocol.http.control.Cookie; // 从JMeter上下文直接获取当前线程关联的Cookie管理器 CookieManager manager = ctx.getCookieManager(); // 注意替换第三个参数为你实际访问站点的域名,比如".yourdomain.com" Cookie cookie = new Cookie("CraftSessionId", vars.get("COOKIE_CraftSessionId"), ".yourdomain.com", "/", false, 0); Cookie cookie2 = new Cookie("CRAFT_CSRF_TOKEN", vars.get("COOKIE_CRAFT_CSRF_TOKEN"), ".yourdomain.com", "/", false, 0); manager.add(cookie); manager.add(cookie2); log.info("cookieManager::" + manager);
注意事项
- 确保测试计划/对应线程组下已添加HTTP Cookie管理器,否则
ctx.getCookieManager()会返回null - 若站点为HTTPS协议,需将Cookie构造的第五个参数(secure)改为
true - JSR223采样器建议选择Groovy作为执行语言,性能最优且兼容性最好
内容的提问来源于stack exchange,提问作者pragneshReddy Nandyala
相关产品推荐
相关产品推荐

