jmeter对cookie信息的保存与使用

本文介绍了如何在Apache JMeter中配置Cookie Manager以保存和使用Cookie数据。首先修改jmeter.properties文件启用Cookie保存,然后在测试计划中添加Cookie Manager。接着,通过Debug Sampler和结果树查看存储的Cookie,并利用BeanShellPostProcessor提取所需数据,将其设置为全局变量。这样,就可以在不同线程组间复用登录状态,解决了跨线程的Cookie使用问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、修改apache-jmeter-5.2.1/bin/jmeter.properties文件,把CookieManager.save.cookies设置为true,并去掉前面的注释#号,保存文件,重新启动jmeter。

2、在jmeter中添加 cooki管理器。以上两步操作完成了将cookie相关信息的保存,接下来是如何查看和使用。

3、添加Debug Sampler,添加对应结果树,运行一下,可以看到存储的cookie数据。

4、通过一些方法获取所需要的数据,列如 使用BeanShell PostProcessor进行提取,设置为全局变量。定义全局变量【${__setProperty(ssoSession,${COOKIE_ssoSession},)};】,红色自定义,橙色为被引用的名称,完成以上操作后,就可以去使用了。

5、去另外一个线程组使用定义好的全局变量,解决了一次登陆,获取cooki值,在其他线程反复使用的测试场景。

 原文链接:https://www.cnblogs.com/csmashang/p/13209832.html,学习了前辈的经验,自己理解并记录,再次使用时就方便了。

后置处理器,处理接收的json丢失 \n \"格式的问题

使用前置处理器-BeanShell 预处理程序,替换以下代码可以解决

// 1. 获取原始变量content1的值
String rawHtml = vars.get("content1");

// 2. 同时转义:
// - 换行符\n → \\n
// - 回车符\r → \\r(避免Windows系统格式问题)
// - 双引号" → \"(关键:修复双引号未转义问题)
String escapedHtml = rawHtml
    .replace("\n", "\\n")
    .replace("\r", "\\r")
    .replace("\"", "\\\"");  // 新增:转义双引号

// 3. 存储处理后的变量
vars.put("content1_escaped", escapedHtml);

// 验证日志
System.out.println("转义后(含双引号处理):" + escapedHtml);

JMeter 中获取 Cookie 主要用于处理需要会话保持的接口测试,尤其是涉及登录认证的场景。以下是获取和使用 Cookie 的常用方法: ### 方法一:使用 HTTP Cookie 管理器 这是最简单的方式,适用于 Cookie 由服务器自动管理的情况。HTTP Cookie 管理器会自动存储和发送 Cookie,无需手动干预。 - **操作步骤**: 1. 在测试计划中添加一个线程组。 2. 在线程组中添加一个 HTTP 请求,用于登录接口。 3. 在线程组的最上方添加一个 **HTTP Cookie 管理器**。 4. HTTP Cookie 管理器会自动从响应头中提取 `Set-Cookie` 字段,并在后续请求中自动添加 `Cookie` 到请求头中。 - **注意事项**: - 如果需要将 Cookie 保存为变量,可以在 `jmeter.properties` 中设置 `CookieManager.save.cookies=true`。 - 变量名称会以 `COOKIE_` 开头,例如 `JSESSIONID` 会被保存为 `COOKIE_JSESSIONID`。[^4] ### 方法二:通过正则表达式提取器手动提取 CookieCookie 需要跨线程组使用,或者 Cookie 值动态变化时,可以使用正则表达式提取器手动提取 Cookie。 - **操作步骤**: 1. 在登录接口的 HTTP 请求下添加一个 **正则表达式提取器**。 2. 设置正则表达式,例如 `Set-Cookie: JSESSIONID=(.*); Path=/`。 3. 提取的值可以保存为一个变量,如 `jsessionid`。 4. 在需要使用 Cookie 的接口下添加一个 **HTTP Cookie 管理器**,并手动填写 Cookie 名称、值、域和路径。 - **示例正则表达式**: ``` Set-Cookie: JSESSIONID=(.*); Path=/ ``` - **适用场景**: - 当 Cookie 需要跨线程组使用时。 - 当 Cookie 的值频繁变化,需要动态提取时。[^3] ### 方法三:直接在请求头中添加 Cookie 如果 Cookie 已知,或者通过其他方式获取(例如通过脚本生成),可以直接在请求头中添加 `Cookie` 字段。 - **操作步骤**: 1. 在 HTTP 请求中添加一个 **HTTP 请求头管理器**。 2. 在请求头中添加 `Cookie` 字段,例如: ``` Cookie: JSESSIONID=57858E4BB5D2BE4071C283BABEE55A87 ``` - **适用场景**: - 当 Cookie 值是固定的,或者通过外部脚本生成时。 - 当需要手动控制 Cookie 的发送内容时。[^2] ### 示例代码片段:使用正则表达式提取 Cookie 以下是一个简单的示例,展示如何通过正则表达式提取 Cookie 并在后续请求中使用。 ```python # 示例正则表达式提取 Cookie 的配置 { "name": "JSESSIONID", "regular_expression": "Set-Cookie: JSESSIONID=(.*); Path=/", "template": "$1$" } ``` 在后续请求中,可以使用 `${JSESSIONID}` 来引用提取的 Cookie 值。[^5] ### 总结 - **HTTP Cookie 管理器** 是最常用的方式,适用于大多数场景。 - **正则表达式提取器** 适用于需要动态提取 Cookie 的情况。 - **手动添加 Cookie 到请求头** 适用于 Cookie 值已知或需要精确控制的场景。 根据实际需求选择合适的方法,确保 Cookie 能够正确传递并保持会话状态。[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值