如何使用保存 X-XSRF-TOKEN 的 JMeter 测试脚本记录器登录 HTTPS 资源?

问题描述

我正在尝试在 JMeter 中记录一个场景,它可以让我登录应用程序并执行一些操作,但是当我尝试重现记录的场景时,我卡在了登录阶段。我在浏览器中设置了代理,设置了根 JMeter 证书,JMeter 记录了所有内容

登录时,我正在执行这样的 POST 请求:

POST https://ip:port/api/logon

POST 数据:
{"user":"text","member":"text","password":"text"}

Cookie 数据:
JSESSIONID=node{random}.node{random}

但它失败了 response code 400 (Bad request)

我认为我应该捕获 X-XSRF-TOKEN 并使用它来以正确的方式访问会话,但我不能这样做。在此请求之前,我正在尝试使用 JMeter 的正则表达式提取器将 X-XSRF-TOKEN 捕获到 ${token} 变量中。我可以在“响应头”中看到它,但仍然找不到捕获它以能够登录此资源的方法

如何使用保存X-XSRF-TOKEN的JMeter测试脚本记录器登录HTTPS资源?

更新: 我想出了如何使用正则表达式从响应头中获取 XSRF-TOKEN。格式如下:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie 我还使用了这篇文章中的信息:https://www.blazemeter.com/blog/how-load-test-csrf-protected-web-sites

为了得到它,我使用了 JMeter 的正则表达式提取器,其中:

Field to check: Response-Headers

Regular expression: Set-Cookie: XSRF-TOKEN=([^;]+?) 我发现 JMeter 的正则表达式解析器可能贪婪和反向。

Template: $1$

Match No.: 1

Default Value: NOT_FOUND

之后,我将 ${XSRF_TOKEN} 提供给下一个 HTTP 请求的 HTTP 标头管理器中的 X-XSRF-TOKEN 字段,但是当我启动脚本时,它仍然无法工作并向我发送一个新的 X -XSRF-TOKEN 在响应头中。

更新№2:

我发现 jmeter 没有发送在 Chrome 浏览器中打开开发者控制台所需的所有 cookie -> 网络 [记录]。 它发送 JSESSIONID cookie,但不发送 XSRF_TOKEN cookie。现在我正在努力将此 cookie 添加到我的请求中,以便它能够建立会话。 似乎只是将它添加到 HTTP Cookie 管理器中,例如:

Name: XSRF-TOKEN Value: ${XSRF_TOKEN} Domain: XXX Path: / Secure: yes\no

不会工作,因为变量值没有分配,它只是在 cookie 发送请求中显示 ${XSRF_TOKEN}。

解决方法

我终于找到了我的问题的答案。 它非常相似 How to write regular expression in JMeter for CSRF token? 但我用过 Regular-expression: XSRF-TOKEN=([^;]+?) 然后我在 HTTP Header 中设置 cookie,例如: 似乎只是将它添加到 HTTP Cookie 管理器中,例如: Name: XSRF-TOKEN Value: ${XSRF_TOKEN} Domain: XXX Path: / Secure: yes\no