如何在JMeter中通过编程方式自动生成JWT Token?
在JMeter中每次运行时生成JWT Token(基于ClientID和ClientSecret)
1. 配置Token获取请求
在测试计划下添加线程组,线程组内新增HTTP请求,按实际认证接口配置:
- 服务器名称/IP:填写Token认证服务的地址
- 请求方法:选
POST(多数认证接口用POST) - 请求路径:比如
/oauth/token(根据你的实际接口调整) - 参数配置:
- 如果是表单提交,在「参数」标签页添加:
grant_type:值填client_credentials(客户端凭证模式通用值,若你的接口要求其他值请替换)client_id:填入你的ClientIDclient_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)
内容的提问来源于stack exchange,提问作者user2451016
相关产品推荐
相关产品推荐

