在 JMeter 中维护对 Keycloak 的 HTTP 请求之间的状态
Maintain State Between HTTP Requests to Keycloak in JMeter
所以我正在尝试自动化创建 Keycloak 用户然后让他们登录的 JMeter 脚本。
首先它获取登录页面并存储代码,这里是一个示例请求:
GET http://Keycloak.com:8001//auth/realms/REALM/protocol/openid-connect/auth?response_type=code&client_id=CLIENT&scope=openid%20profile%20email&nonce=N5b3a2da23c04a&response_mode=form_post&resource=RESOURCE&state=2SJwtlVZrswlGkw&redirect_uri=REDIRECTURI
但是,当我获取注册页面时,代码发生了变化,tab_id 也发生了变化。如何防止 keycloak 为线程中的每个 HTTP 请求生成新的代码令牌?
此外,为什么 JMeter 的每个 HTTP 请求都像一个新会话,而不是系列中的下一个请求?
编辑:
除了为线程使用 HTTP Cookie 管理器和 HTTP 缓存管理器之外,我还使用正则表达式提取器来跟踪代码和执行变量。
查看我的 POST 请求,这两个变量与之前 HTTP 请求的变量相同,并且我所有的 cookie 都在维护中,但每次我尝试这种自动登录时,我都会收到 400错误,keycloak 事件日志显示 invalid_code 错误。
编辑:
根据要求,这里是我所有登录请求的屏幕截图
您需要保持命中之间的相关性。请浏览下面的博客
https://www.blazemeter.com/blog/how-to-handle-correlation-in-jmeter
很可能您的正则表达式提取器未嵌套在您尝试从中提取数据的 HTTP 请求中。
如果它的范围太广,它适用于所有的 HTTP 请求,所以第一次成功提取,但是对于下一个不包含令牌的请求,提取器运行并用空值覆盖旧值一.
查看 JMeter 中的范围规则:
根据 keycloak,如果您使用 keycloak.com
,则必须使用 https
Keycloak can run out of the box without SSL so long as you stick to private IP addresses like localhost, 127.0.0.1, 10.0.x.x, 192.168.x.x, and 172..16.x.x. If you don’t have SSL/HTTPS configured on the server or you try to access Keycloak over HTTP from a non-private IP adress you will get an error.
所以你有 3 个选择:使用私有 IP 地址、使用反向代理或负载平衡器来处理 HTTPS 或为 Keycloak 服务器启用 HTTPS。
所以我正在尝试自动化创建 Keycloak 用户然后让他们登录的 JMeter 脚本。
首先它获取登录页面并存储代码,这里是一个示例请求:
GET http://Keycloak.com:8001//auth/realms/REALM/protocol/openid-connect/auth?response_type=code&client_id=CLIENT&scope=openid%20profile%20email&nonce=N5b3a2da23c04a&response_mode=form_post&resource=RESOURCE&state=2SJwtlVZrswlGkw&redirect_uri=REDIRECTURI
但是,当我获取注册页面时,代码发生了变化,tab_id 也发生了变化。如何防止 keycloak 为线程中的每个 HTTP 请求生成新的代码令牌?
此外,为什么 JMeter 的每个 HTTP 请求都像一个新会话,而不是系列中的下一个请求?
编辑:
除了为线程使用 HTTP Cookie 管理器和 HTTP 缓存管理器之外,我还使用正则表达式提取器来跟踪代码和执行变量。
查看我的 POST 请求,这两个变量与之前 HTTP 请求的变量相同,并且我所有的 cookie 都在维护中,但每次我尝试这种自动登录时,我都会收到 400错误,keycloak 事件日志显示 invalid_code 错误。
编辑:
根据要求,这里是我所有登录请求的屏幕截图
您需要保持命中之间的相关性。请浏览下面的博客
https://www.blazemeter.com/blog/how-to-handle-correlation-in-jmeter
很可能您的正则表达式提取器未嵌套在您尝试从中提取数据的 HTTP 请求中。
如果它的范围太广,它适用于所有的 HTTP 请求,所以第一次成功提取,但是对于下一个不包含令牌的请求,提取器运行并用空值覆盖旧值一.
查看 JMeter 中的范围规则:
根据 keycloak,如果您使用 keycloak.com
Keycloak can run out of the box without SSL so long as you stick to private IP addresses like localhost, 127.0.0.1, 10.0.x.x, 192.168.x.x, and 172..16.x.x. If you don’t have SSL/HTTPS configured on the server or you try to access Keycloak over HTTP from a non-private IP adress you will get an error.
所以你有 3 个选择:使用私有 IP 地址、使用反向代理或负载平衡器来处理 HTTPS 或为 Keycloak 服务器启用 HTTPS。