无法获得对 JMeter 请求的授权响应,而它们具有相同的 CSRF 令牌和 sessionID

Can't get authorized response on requests in JMeter, while they have the same CSRF token and sessionID

在 Apache JMeter 的性能测试期间,我无法正常加载我的网站。首先我录制了脚本(BadBoy的),包含授权和访问一些页面,不登录就无法访问。接下来,我将它导出到 JMeter,配置正则表达式提取器以在授权请求之前从请求中获取 csrftoken,它看起来工作正常: no errors in http-requests

但是如果查看每个 post 授权请求的选项卡 "Response data",内容不像正确加载的页面,它只是以空授权表单开始页面,即在尽管所有请求在 Cookie 数据和 Set-Cookie(示例结果)中都具有相同的会话 ID 和 csrftoken,但在某种程度上会话是新的,出现在授权请求结果中。

已添加 HTTP Cookie 管理器。

有人遇到过这个问题吗?

更新: 我进行了一项实验,将 cookie 从 Chrome 传输到 Mozilla Firefox,复制了 'csrftoken' 和 'session id',然后——瞧! - 它有效,我在两个浏览器中获得了相同的授权会话。仍然不知道 JMeter 有什么问题

JMeter 自动将低于 400 的 HTTP 响应代码视为成功,它不会执行任何响应检查 body。很可能您的正则表达式提取器失败了,添加一个 Debug Sampler 并仔细检查结果变量值。

可能还有以下可能的原因:

  • 您可能需要以 encoded/escaped 形式发送 CSRF 令牌,因此需要使用 __urlEncode() 函数。或相反亦然。
  • 应用程序可能需要多个位置的令牌,即不仅作为表单参数,而且作为额外的 HTTP Header。在这种情况下,您需要通过 HTTP Header Manager
  • 传递它

您可能还想尝试新的 step-by-step debugger for JMeter 来查明问题的根源。

这是此令牌的默认行为。 1. 确保这些令牌传递到哪里。它可能会通过多次。检查 header。一般是“xref-token”再传.

它应该是准确的格式,如果需要解码它,也删除 , or ; or /。你也可以使用fiddler。

解决方案是在 Chrome 中通过 Blazemeter 插件录制脚本并进一步导出为“.JMX”格式后找到的。 向每个 HTTP 请求添加 HTTP Header 管理器 like this(当然还有其特殊字段)解决了问题