JMeter之Json Path Extractor使用(解决json接收上一个请求参数)

本文介绍在JMeter中如何使用JSONPathExtractor插件从JSON响应中提取所需参数,解决正则表达式提取失败的问题,并通过具体示例说明如何正确配置及避免常见错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在使用Jmeter进行接口测试,被一个问题困扰了很久,就是第二个请求如何接收上一个请求响应中的参数,刚开始尝试着用网上普遍说的正则表达式,长了了N多次之,都没有达到我想要的效果,被整的够惨,于是,开始尝试使用第二种方法,就是Jmeter之Json Path Extractor,感觉棒极了,在此记录下

 

除了正则提取器,对于返回结果为 xml 或者 json 内容的请求,JMeter 分别有 XPath Extractor、JSON Path Extractor 等提取器进行提取。

1、下载安装 Json Path Extractor插件,

1.1 插件安装——JMeterPlugins-Extras-1.4.0.zip 解压后,下载后解压以后将lib和lib/ext中的jar包放到安装目录对应位置,重启即可
地址: https://www.jianshu.com/p/56a607fc0d8f 或者 https://jmeter-plugins.org/wiki/JSONPathExtractor/
1.2 尝试上述步骤没有安装成功,于是用JSONPathExtractorExample.jmx (在官网下的一个testplan)这个打开后点击安装,提示安装成功。

成功后,重启JMeter

2、使用方法

 

Variable names : 名称 
JSONPath Expression:JSON表达式 
Match Numbers:匹配哪个,可为空即默认第一个 
Default Value:未取到值的时候默认值

比如某一请求的返回值为:

 

这里因为返回的是json数据,$.data.token,获取token的值

但是有碰到一个坑 
另外一个接口请求返回值为:

 

同样,使用$.data.id去提取id的值时,发现获取到的数据为空 
原来这个responses 的data为数组,故应为 $.data[0].id 提取第1个值

如下:

3、实践成功

<think>嗯,用户的问题是关于在JMeter使用JSON Extractor来传递参数,从上一个接口的响应中提取数据,然后传递给下一个接口作为请求参数。我需要详细解释整个过程,并且确保步骤清晰。 首先,我得回忆一下JSON Extractor使用方法。根据引用[1],添加JSON Extractor是在HTTP请求的右键菜单中的后置处理器里。所以第一步应该是打开测试计划,找到对应的HTTP请求,添加JSON Extractor。然后需要配置参数,比如名称、变量名、JSON路径表达式等。引用[3]提到JSON路径的写法,比如$.result.data[0].orderNo,这里可能需要解释为什么需要[0],因为data可能是数组结构,所以需要索引。 用户可能需要知道如何正确编写JSON Path表达式,这部分需要详细说明。例如,如果响应结构是嵌套的,路径需要逐层定位。还要注意数组的情况,索引的使用是否正确。比如,如果data是一个数组,提取第一个元素的orderNo就需要[0]。 接下来,如何将提取的变量传递给下一个接口。在下一个接口的请求参数中,使用${变量名}的格式引用。比如在Body Data或者Parameters里填入${orderNo}。这时候需要注意变量作用域,确保两个接口在同一个线程组或作用域内,否则变量可能不可见。 另外,常见的问题可能包括JSON路径写错或者变量名没有正确引用。比如,变量名是否一致,是否使用了正确的语法。这时候需要提醒用户检查这些地方,或者使用调试取样器来查看提取的值是否正确。 可能用户还会遇到多个值的情况,比如需要提取数组中的多个元素,这时候JSON Extractor的匹配数字该怎么设置。比如,匹配数字设为-1会提取所有,然后通过变量名_1、变量名_2等方式访问。这部分也需要说明,但根据引用中的例子,用户可能更关注基础的单值提取。 需要确保步骤清晰,分点说明,例如分为添加JSON Extractor、配置参数、下游引用三个步骤。同时,引用相关的引用内容,比如引用[1]和引用[3]中的配置参数JSON路径写法。 最后,生成的相关问题要围绕用户可能进一步想知道的内容,比如如何处理复杂JSON结构、正则表达式对比、调试方法、多值处理等。这样可以帮助用户深入理解。</think>### 如何在JMeter中通过JSON Extractor传递参数 以下是实现接口参数传递的详细步骤,以 **从接口A提取数据并传递给接口B** 为例: --- #### **1. 添加JSON Extractor到接口A** 1. **定位接口A** 在JMeter测试计划中,选中需要提取数据的HTTP请求(接口A)。 2. **添加后置处理器** 右键点击接口A → `添加` → `后置处理器` → `JSON Extractor`[^1]。 3. **配置关键参数** - **变量名称**:自定义变量名(例如 `orderNo`) - **JSON路径表达式**:根据接口A的JSON响应结构编写路径(例如 `$.result.data[0].orderNo`) - **匹配数字**:默认`0`(提取第一个匹配值),若需提取所有值设为`-1`[^3]。 ```plaintext | 名称 | 值 | |---------------|-------------------| | Variable Name | orderNo | | JSONPath Expr | $.result.data[0].orderNo | | Match No. | 0 | ``` --- #### **2. 在接口B中引用提取值** 1. **定位接口B的请求参数** 在需要传递参数的字段(如URL参数请求体等)中,使用`${变量名}`格式引用。 2. **示例场景** - **URL参数**:`http://api.example.com/order?id=${orderNo}` - **请求体(JSON)**: ```json { "orderId": "${orderNo}", "status": "paid" } ``` --- #### **3. 调试与验证** 1. **使用调试取样器** 添加`Debug Sampler`查看提取的变量值是否准确。 2. **查看结果树** 在`View Results Tree`中检查接口B的请求内容,确认参数已正确替换[^2]。 --- ### 常见问题解决 | 问题现象 | 解决方案 | |------------------------|----------------------------------| | 变量值为空 | 检查JSON路径语法,验证响应数据结构[^3] | | 变量作用域失效 | 确保接口A和接口B在同一线程组内 | | 数组索引越界 | 调整JSON路径中的索引(例如`[1]`)| --- ### 对比:JSON Extractor vs 正则表达式 | 特性 | JSON Extractor | 正则表达式 | |---------------------|------------------------------------|-------------------------| | **适用场景** | 结构化JSON响应 | 非结构化文本/HTML | | **语法复杂度** | 简单(基于JSONPath) | 较高(需正则语法) | | **性能** | 更高(直接解析JSON结构) | 较低(全文匹配) | ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值