jmeter通过json提取器获取接口返回token(超详细)

一、接口添加后置处理器——JSON提取器

二、登录接口添加监听器——查看结果树

三、运行登录接口,查看结果数返回的json,是否有token值

四、填写JSON提取器的数据

1、Name of created variables:提取的变量名称,用于存储提取到的值

2、JSON Path Expressions:用于提取 JSON 数据的路径表达式

3、Match Numbers:指定提取第几个匹配的值,当 JSONPath 表达式匹配到多个值时,选择提取哪个值。

  • 0:提取所有匹配的值(返回数组)。(默认值)

  • 1:提取第一个匹配的值。

  • 2:提取第二个匹配的值,以此类推。

4、Default Value:当提取失败时返回的默认值。

五、通过查看结果数检查“JSON Path Expressions”是否提取正确:

六、下一个接口需要 传入登录获取的token

添加一个HTTP信息头管理,传入获取的token, ${变量名称}

七、示例

假设服务器返回以下 JSON 响应:获取id

{
  "data": {
    "id": 12345,
    "name": "John Doe",
    "roles": ["admin", "user"]
  },
  "status": "success"
}

配置 JSON 提取器:

  • 名称(Name of created variables):userId
  • JSON Path Expressions:$.data.id
  • Match Numbers:1
  • Default Value:NOT_FOUND

提取结果:

  • 提取到的变量:userId
  • 变量值:12345

——————————————————————————————————————————

常见 JSONPath 表达式示例

  1. 提取单个字段

    • JSONPath:$.data.name

    • 结果:"John Doe"

  2. 提取数组中的所有值

    • JSONPath:$.data.roles[*]

    • 结果:["admin", "user"]

  3. 提取数组中的第一个值

    • JSONPath:$.data.roles[0]

    • 结果:"admin"

  4. 提取不存在的字段

    • JSONPath:$.data.age

    • 结果:返回默认值(如 NOT_FOUND)。

### 处理JMeterJSON Extractor获取Token过期 当在JMeter中使用`JSON Extractor`获取Token并遇到其过期的情况时,可以采取多种策略来有效管理这一问题。以下是几种常见的方式: #### 动态刷新Token机制 为了应对Token的有效期限,在设计测试计划之初就应该考虑加入动态刷新逻辑。通常情况下,API提供者会为每次成功的认证请求返回一个新的或更新后的Token以及它的有效期(Expires In)。因此可以在首次成功获得Token之后设置定时器或者条件控制器定期重新发起认证请求以保持Token最新。 对于具体的实现方式,可以通过组合使用`If Controller`和时间函数来判断当前持有的Token是否即将到期,并据此决定是否需要再次调用登录接口获取新的Token[^1]。 ```java // 判断Token是否快要过期, 如果剩余时间小于设定阈值,则触发重新获取Token的操作 ${__groovy((vars.get('expires_in') as int - (System.currentTimeMillis() / 1000L)) < ${threshold},)} ``` #### 错误处理与重试机制 除了预防性的措施外,还应该建立有效的错误捕捉流程。一旦检测到由于Token失效而导致的目标资源访问失败(通常是HTTP状态码401 Unauthorized),应立即尝试通过相同的认证过程重新获取Token,并继续执行之前中断的任务链路。 这一步骤可通过配置`Response Assertion`配合`Loop Controller`完成;前者用来验证响应结果的状态码是否符合预期,后者则负责控制循环次数直到操作成功为止[^2]。 ```xml <!-- 配置Assertion --> <elementProp name="status_code" elementType="Assertion"> <stringProp name="Expected">200</stringProp> </elementProp> <!-- 使用Loop Controller进行重试 --> <jmeterTestPlan version="1.2" properties="5.0"> <!-- ...其他组件... --> <hashTree> <kg.apc.jmeter.modifiers.IfController guiclass="IfControllerGui" testclass="IfController" testname="Check Token Validity and Retry on Failure"> <boolProp name="conditionIsVarExpr">false</boolProp> <stringProp name="condition">${JMeterThread.last_sample_ok} == false && ${responseCode} =~ "401"</stringProp> <collectionProp name="testFragment"> <!-- 放置重新获取Token的相关Sampler在这里 --> </collectionProp> </kg.apc.jmeter.modifiers.IfController> </hashTree> </jmeterTestPlan> ``` #### 日志记录与监控 在整个过程中,良好的日志管理和实时性能监测同样重要。利用JMeter内置的日志功能或者是第三方插件可以帮助追踪每一次Token交换的过程及其结果,从而便于后期分析可能出现的问题所在。同时也可以借助这些工具观察整个系统的运行状况,及时发现潜在的风险因素[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值