You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JMeter对基于Keycloak认证的单体应用做负载测试?

处理Keycloak认证的JMeter负载测试方案

一、手动构造认证请求替代录制

Blazemeter录制失败多因Keycloak的OAuth2/OpenID Connect流程涉及前端跳转、加密参数,录制工具无法捕获完整上下文。直接手动构造请求更可靠:

  • 步骤1:获取Token端点信息
    从Keycloak控制台的Realm设置中,找到「OpenID Connect Endpoint Configuration」,记下token_endpoint地址,格式通常为http://your-keycloak/auth/realms/{realm-name}/protocol/openid-connect/token

  • 步骤2:添加HTTP请求获取Access Token
    在JMeter中新增HTTP请求,方法选POST,URL填入上述token_endpoint:

    • 内容类型设置为application/x-www-form-urlencoded
    • 参数列表添加以下项:
      • grant_type: password(密码模式更适合后端服务负载测试;若需授权码模式需额外处理前端跳转,复杂度更高)
      • client_id: 应用在Keycloak中注册的客户端ID
      • username: 测试账号用户名
      • password: 测试账号密码
      • client_secret: 若客户端配置了密钥,需添加该参数
  • 步骤3:提取并复用Access Token
    添加JSON Extractor,从返回的JSON响应中提取access_token字段:引用名称设为access_token,JSON Path表达式填$.access_token。后续业务请求的请求头中添加Authorization: Bearer ${access_token},即可带上认证信息。

  • 步骤4:处理Token过期
    Keycloak Token默认有效期较短,可添加If Controller,通过${__jexl3(${access_token_expires_in} < ${__time(,)},)}判断是否过期(需先提取expires_in字段),控制器内嵌套Token请求实现自动刷新。

二、其他可用工具推荐

  • k6:支持脚本化负载测试,对OAuth2流程有原生支持,用JavaScript编写测试逻辑,处理Keycloak认证灵活,适合具备代码基础的测试人员。
  • Gatling:基于Scala的高性能负载测试工具,拥有官方维护的Keycloak认证插件,文档中提供完整示例脚本,高并发场景下表现优异。
  • Locust:Python编写的分布式负载测试工具,通过代码定义用户行为,可快速实现Keycloak的Token获取逻辑,扩展性强。

内容的提问来源于stack exchange,提问作者Omar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 06:22:36