JMeter中的SameSite Cookie

时间:2020-03-26 23:08:43

标签: jmeter samesite

我正在为需要在Chrome中禁用“默认情况下的Cookie的SameSite”的网站开发JMeter测试,如下所示:

Turn off samesite enforcement in chrome version > 80

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

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

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

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

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

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

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]

...

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

1 个答案:

答案 0 :(得分:1)

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

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

  1. 选择更多“放松”的cookie policy,即HTTP Cookie Manager中的netscape

    enter image description here

  2. 在{em> user.properties 文件中添加CookieManager.check.cookies=true行(需要重新启动JMeter才能拾取该属性)

更多信息:HTTP Cookie Manager Advanced Usage - A Guide


如果上述步骤对您没有帮助:

  • log4j2.xml 文件中添加下一行,从而提高HTTP Cookie管理器和朋友的JMeter日志记录详细程度:

    <Logger name="org.apache.jmeter.protocol.http.control" level="debug" />
    
  • 最后但并非最不重要的一点是,您始终可以使用Regular Expression Extractor从上述Set-Cookie标头中提取Cookie,并使用HTTP Header Manager