首页 > 解决方案 > JMeter 中的 SameSite cookie

问题描述

我正在为需要在 Chrome 中禁用“SameSite by default cookies”的站点开发 JMeter 测试,如下所示:

在 chrome 版本 > 80 中关闭相同站点强制

我正在测试的网站只返回 HTML 页面;它没有单独的 API 层。导致问题的主要元素是嵌入在 iframe 中的第三方组件。iframe 内容使用 SSO 向主站点进行身份验证。在 Chrome 中,如果 SameSite 设置设置为默认值,我将获得第三方组件的登录页面,而不是看到组件呈现。如果 SameSite 设置设置为已禁用,则第三方组件会正确呈现。

当我在 JMeter 中执行测试时,我遇到了与 Chrome 中“默认 cookie 相同的站点”设置为默认时遇到的相同问题——具体来说,我被重定向到登录页面。

但是,当我在 Postman 中执行相同的 HTTP 请求序列时,一切正常。

JMeter 是否内置了一些 SameSite cookie 行为,如果有,我该如何禁用它?

更新:按照 Dmitri 的建议,我尝试了所有不同的 cookie 管理器。

我还启用了 cookie 管理器日志记录。如果我将 HTTP Cookie 管理器的 Cookie 策略设置为默认值,cookie 上的“过期”属性会导致错误:

2020-03-27 12:56:58,613 ERROR o.a.j.p.h.c.HC4CookieHandler: Unable to add the cookie
org.apache.http.cookie.MalformedCookieException: Invalid 'expires' attribute: Fri, 03 Apr 2020 17:56:54 GMT
    at org.apache.http.impl.cookie.BasicExpiresHandler.parse(BasicExpiresHandler.java:64) ~[httpclient-4.5.10.jar:4.5.10]
    at org.apache.http.impl.cookie.CookieSpecBase.parse(CookieSpecBase.java:113) ~[httpclient-4.5.10.jar:4.5.10]
    at org.apache.http.impl.cookie.DefaultCookieSpec.parse(DefaultCookieSpec.java:140) ~[httpclient-4.5.10.jar:4.5.10]
    at org.apache.jmeter.protocol.http.control.HC4CookieHandler.addCookieFromHeader(HC4CookieHandler.java:124) [ApacheJMeter_http.jar:5.2.1]

...

如果我根据 HTTPClient 文档将 Cookie 策略设置为标准——“符合 RFC 6265 的策略(互操作性配置文件)”——我在日志中看不到任何 cookie 错误消息,但我仍然被重定向到登录页面.

标签: jmetersamesite

解决方案


如果您正在测试的应用程序在Set-Cookie标头中发送格式错误的 cookie,JMeter 可能会拒绝与HTTP 请求采样器的当前域不匹配或因任何其他原因过期或无效的 cookie。

您可以通过以下方式“告诉”JMeter 限制较少:

  1. 选择更“宽松”的cookie 策略,即netscapeHTTP Cookie 管理器中

    在此处输入图像描述

  2. CookieManager.check.cookies=true行添加到user.properties文件(需要重新启动 JMeter 才能获取该属性)

更多信息:HTTP Cookie 管理器高级使用 - 指南


如果上述步骤没有帮助,您可以:


推荐阅读