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

如何在JMeter中通过编程方式自动生成JWT Token?

在JMeter中每次运行时生成JWT Token(基于ClientID和ClientSecret)

1. 配置Token获取请求

在测试计划下添加线程组,线程组内新增HTTP请求,按实际认证接口配置:

  • 服务器名称/IP:填写Token认证服务的地址
  • 请求方法:选POST(多数认证接口用POST)
  • 请求路径:比如/oauth/token(根据你的实际接口调整)
  • 参数配置:
    • 如果是表单提交,在「参数」标签页添加:
      • grant_type:值填client_credentials(客户端凭证模式通用值,若你的接口要求其他值请替换)
      • client_id:填入你的ClientID
      • client_secret:填入你的ClientSecret
    • 如果是JSON请求,在「请求体」标签页写入JSON格式参数,比如:
      {
        "grant_type": "client_credentials",
        "client_id": "你的ClientID",
        "client_secret": "你的ClientSecret"
      }
      

2. 提取返回的JWT Token

在Token请求下添加JSON提取器(接口返回JSON格式时用):

  • 引用名称:设为jwt_token(后续请求用这个变量调用Token)
  • JSON Path表达式:填$.access_token(根据接口返回的JSON结构调整,比如返回{"access_token":"xxx",...}就用这个)
  • 匹配数字:填1(取第一个匹配的Token值)

如果接口返回不是JSON,改用正则表达式提取器:

  • 引用名称:同样设为jwt_token
  • 正则表达式:填"access_token":"(.*?)"
  • 模板:填$1$

3. 在业务请求中使用Token

在需要携带Token的业务HTTP请求里,添加请求头管理器,新增一个请求头:

  • 名称:Authorization
  • 值:Bearer ${jwt_token}(注意Bearer后面有空格,变量名要和提取器的引用名称一致)

4. 保证每次运行都获取新Token

  • 单线程场景:上面的配置已经能实现每次运行重新请求Token
  • 多线程/高并发场景:
    • 若Token有效期较长,把Token请求放在setUp线程组中,所有测试线程启动前统一获取一次Token
    • 若Token有效期短,在每个线程的循环逻辑里加入Token请求,或者用定时器定期刷新
    • 复杂场景(比如需要自定义签名逻辑),可以用JSR223预处理程序(选Groovy语言)写代码生成Token,示例代码:
      import groovy.json.JsonSlurper
      import java.net.URLEncoder
      import org.apache.http.client.fluent.Request
      
      def clientId = "你的ClientID"
      def clientSecret = "你的ClientSecret"
      def tokenUrl = "https://你的认证服务地址/oauth/token"
      
      def postData = "grant_type=client_credentials&client_id=${URLEncoder.encode(clientId, 'UTF-8')}&client_secret=${URLEncoder.encode(clientSecret, 'UTF-8')}"
      def response = Request.Post(tokenUrl)
                            .bodyString(postData, org.apache.http.entity.ContentType.APPLICATION_FORM_URLENCODED)
                            .execute()
                            .returnContent()
                            .asString()
      
      def json = new JsonSlurper().parseText(response)
      vars.put("jwt_token", json.access_token)
      
    把这个预处理程序放在业务请求前面,每次执行都会重新获取Token。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:50:25