JMeter - 使用 cookie 字段作为变量
JMeter - Using cookie field as variable
最近一直在研究 JMeter。我需要从 cookie 中获取身份验证字符串,并在将请求发布到不同路径时使用它。每次点击登录页面时,Auth 字符串都会更改。
当路径不同时,JMeter 中是否有一种方法可以为测试中的所有路径使用一个 cookie?
IE-
获取 Cookie 的路径:
网络服务器:someURL.net
路径:/some/login/path
使用 cookie 值:
网络服务器:someURL.net
路径:/somewhere/different
我已经设置了以下 JMeter 属性,以便能够根据需要使用 Cookie。
CookieManager.check.cookies=false
CookieManager.save.cookies=true
CookieManager.allow_variable_cookies=true
当我 运行 采样器将请求的结果发送给 /somewhere/different
Returns[无 cookie]
当路径为 /some/login/path
时,我可以看到请求中存在的 cookie 数据
我已经尝试定义一个用户定义的 cookie,但我需要先获取授权字符串才能在不同的路径中使用它。
执行此操作时,我可以看到添加到 /somewhere/different 请求中的 cookie 数据,但未设置 var。我认为这不是解决挑战的正确方法。
为了首先获取授权字符串,我尝试使用控制器 "User defined Variables" 来存储 cookie 值并将其传回 Cookie 管理器——这没有用。
我查看了使用 RegEx 提取器获取值的方法,因此我可以使用它,但我不确定这是否可以用于获取 cookie 值?
我的理解是每个线程组不能使用多个 cookie 管理器。当我键入此内容时,我意识到解决方案可能是我必须使用单独的线程并将 cookie 值从一个线程传递到另一个线程。
如果第一次在这里提出问题,请道歉,在搜索没有找到解决方案后注册询问。如果您需要为我在上面尝试过的任何场景设置更多 info/screens 我的 JMeter,我会添加它们。还有谢谢。
恐怕您将无法使用内置的 JMeter 功能来操作 cookie,您需要更深入地从编写测试元素的脚本中调用 JMeter API 方法。
例如:
- 添加一个 Beanshell PostProcessor 作为第一个请求的子项
将以下代码放入 PostProcessor(s) "Script" 区域:
import org.apache.jmeter.protocol.http.control.Cookie;
import org.apache.jmeter.protocol.http.control.CookieManager;
CookieManager manager = ctx.getCurrentSampler().getCookieManager();
for (int i = 0; i < manager.getCookieCount(); i++) {
Cookie cookie = manager.get(i);
if (cookie.getName().equals("your_cookie_name")) {
Cookie newCookie = cookie;
newCookie.setPath("/your/new/path");
manager.remove(i);
manager.add(newCookie);
ctx.getCurrentSampler().setCookieManager(manager);
break;
}
}
根据您的要求更改 your_cookie_name
和 /your/new/path
它将创建一个具有不同路径的新文件。 JMeter 的 HTTP Cookie 管理器不允许 2 个具有相同名称的 cookie,因此必须删除旧的。
参考文献:
- CookieManager class JavaDoc
- JMeterContext class JavaDoc
- How to Use BeanShell: JMeter's Favorite Built-in Component 指南 - 脚本概述、有关预定义变量的额外信息、"cookbook" 以及一些示例。
最近一直在研究 JMeter。我需要从 cookie 中获取身份验证字符串,并在将请求发布到不同路径时使用它。每次点击登录页面时,Auth 字符串都会更改。
当路径不同时,JMeter 中是否有一种方法可以为测试中的所有路径使用一个 cookie?
IE-
获取 Cookie 的路径: 网络服务器:someURL.net
路径:/some/login/path
使用 cookie 值: 网络服务器:someURL.net
路径:/somewhere/different
我已经设置了以下 JMeter 属性,以便能够根据需要使用 Cookie。
CookieManager.check.cookies=false
CookieManager.save.cookies=true
CookieManager.allow_variable_cookies=true
当我 运行 采样器将请求的结果发送给 /somewhere/different
Returns[无 cookie]
当路径为 /some/login/path
时,我可以看到请求中存在的 cookie 数据我已经尝试定义一个用户定义的 cookie,但我需要先获取授权字符串才能在不同的路径中使用它。
执行此操作时,我可以看到添加到 /somewhere/different 请求中的 cookie 数据,但未设置 var。我认为这不是解决挑战的正确方法。
为了首先获取授权字符串,我尝试使用控制器 "User defined Variables" 来存储 cookie 值并将其传回 Cookie 管理器——这没有用。
我查看了使用 RegEx 提取器获取值的方法,因此我可以使用它,但我不确定这是否可以用于获取 cookie 值?
我的理解是每个线程组不能使用多个 cookie 管理器。当我键入此内容时,我意识到解决方案可能是我必须使用单独的线程并将 cookie 值从一个线程传递到另一个线程。
如果第一次在这里提出问题,请道歉,在搜索没有找到解决方案后注册询问。如果您需要为我在上面尝试过的任何场景设置更多 info/screens 我的 JMeter,我会添加它们。还有谢谢。
恐怕您将无法使用内置的 JMeter 功能来操作 cookie,您需要更深入地从编写测试元素的脚本中调用 JMeter API 方法。
例如:
- 添加一个 Beanshell PostProcessor 作为第一个请求的子项
将以下代码放入 PostProcessor(s) "Script" 区域:
import org.apache.jmeter.protocol.http.control.Cookie; import org.apache.jmeter.protocol.http.control.CookieManager; CookieManager manager = ctx.getCurrentSampler().getCookieManager(); for (int i = 0; i < manager.getCookieCount(); i++) { Cookie cookie = manager.get(i); if (cookie.getName().equals("your_cookie_name")) { Cookie newCookie = cookie; newCookie.setPath("/your/new/path"); manager.remove(i); manager.add(newCookie); ctx.getCurrentSampler().setCookieManager(manager); break; } }
根据您的要求更改
your_cookie_name
和/your/new/path
它将创建一个具有不同路径的新文件。 JMeter 的 HTTP Cookie 管理器不允许 2 个具有相同名称的 cookie,因此必须删除旧的。
参考文献:
- CookieManager class JavaDoc
- JMeterContext class JavaDoc
- How to Use BeanShell: JMeter's Favorite Built-in Component 指南 - 脚本概述、有关预定义变量的额外信息、"cookbook" 以及一些示例。