Jmeter - Json提取器

本文详细介绍了JSONPath提取器的用法,包括如何提取不同层级的值,列表中的元素,以及如何通过条件筛选获取特定值。还提供了调试方法,如在ViewResultTree中使用JSONPathTester进行测试。此外,文章还展示了获取前N个值、固定条件下多个key的value值等高级用法,对于理解和应用JSONPath提取器非常有帮助。

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

一、用法说明

        此提取器用于提取请求返回结果中的某个值或者某一组值,用法比正则表达式要简单,标准写法为$.key,其中key为返回结果map中的一个键,如果是多层则继续用.key进行即可,如果遇到key的value值为一个List,则使用.key[n],其中n为list中元素的编号,如下使用实例来说明下如何使用;在这里插入图片描述
Json提取器语法用分号隔开,应当与参数名称一一对应;
匹配编号一样的需要用分号隔开,与参数名称一一对应;
默认值同样用分号隔开,与参数名称一一对应;

二、调试方法:

        在View Result Tree中选择JSON Path Tester,即可展开如下图的右侧内容,输入表达式即可拿来测试书写的Json提取器表达式是否能正常工作:在这里插入图片描述

         下面这个图片中的json字符串即为测试对象:在这里插入图片描述

 
1、获取第一层中的某个value值:

        获取jsonrpc这个key的value值:
        输入 $.jsonrpc,正常获取到结果

在这里插入图片描述

2、获取第二层List中某个key的value值

        譬如我们要获取result的值中第一个元素的name的值,预期应当为111,使用如下语句:
$.result[0].name,结果符合预期,此处注意列表编号从0开始;

在这里插入图片描述

3、获取第三层的某个value值

        譬如我们要获取528,使用语句为$.result[1].approver[0]在这里插入图片描述

         从这里可知,我们书写表达式时需要根据是map还是list来进行区别,list需要使用[n]标号,而map则不用,每一层用.来区分即可;

4、获取列表下全部的某一个元素

        譬如我们要获取全部的key为name的value值,可以使用如下语句$.result[*].name

        在这里插入图片描述

获取到的为一个列表,其有三个值,符合预期;
那么获取第三层中所有的的第一个元素呢?
表达式为$.result[*].approver[0],结果如下,符合预期;
在这里插入图片描述

这里说明下,使用*号意味着获取所有列表元素;
此种情况下返回的为一个list,那么如果此list被放入参数var中,那么我如果想获取var中某一个值譬如528该如何使用呢?答案就是在参数名后边加_n,其中n为编号,从1开始;
${var_2}即可获取到列表中第二个元素即528;

5、提取特定条件的某个值

如下我想提取object_id为0的那个元素的id值:在这里插入图片描述
可以使用语法$.result.records[?(@.object_id==0)].id

在这里插入图片描述 写法?(@.object_id==0)为固定写法,常用于列表内元素的筛选,如果值为字符串,则记得加双引号;

6、获取前N个值

还是以上面那个json字符串作为例子,如果要获取records下的前两个元素的id值,则使用语法$.result.records[:2].id

在这里插入图片描述

$.result.records[2].id 是排除前两条数据;
$.result.records[-2].id 是排除后两条数据;

7、获取固定条件下的多个key的value值

语法$.result.records[?(@.object_id==0)].["id","name","is_active"]

在这里插入图片描述

 

<think>好的,用户现在想了解如何在JMeter中设置JSON提取器。首先,我需要回顾之前的对话历史。用户之前询问了关于JMeter压测出现500错误的问题,我详细介绍了可能的原因和解决方案,其中包括提到JSON提取器的使用。现在用户可能是在遇到相关问题时,需要更具体的指导,特别是如何配置JSON提取器来处理动态参数,比如token或会话ID,以避免500错误。 接下来,我需要确定用户的具体需求。他们可能是在压测过程中遇到了需要从JSON响应中提取数据的情况,比如认证后的token,用于后续的请求。用户可能对JMeter提取器不太熟悉,或者在使用过程中遇到了问题,比如提取不到正确的值,导致后续请求失败,进而引发500错误。因此,他们需要一步步的配置指南和注意事项。 用户可能是测试工程师或开发人员,负责性能测试,需要确保脚本正确处理动态数据。他们可能希望不仅了解如何设置JSON提取器,还希望知道常见问题及解决办法,比如路径是否正确、如何处理多个匹配项等。此外,他们可能还想知道如何调试提取的结果,比如使用调试采样器或查看结果树来验证提取的值是否正确。 我需要确保回答结构清晰,分步骤说明配置过程,并包含示例,这样用户更容易理解。同时,要提醒常见的错误点,比如JSON路径表达式是否正确,变量作用域的问题,以及是否需要处理多个匹配项。另外,可能还需要提到与其它元件(如HTTP请求、头管理器)的配合使用,确保提取的值被正确传递到后续请求中。 最后,需要确认回答是否解决了用户的实际问题,是否覆盖了可能遇到的难点,并提供足够的细节让用户能够自行操作和验证。如果有遗漏的部分,比如其他提取器的比较(如正则表达式提取器),是否需要简要提及,但用户明确问的是JSON提取器,所以重点应放在JSON提取器的配置上。</think>以下是关于 **JMeter JSON提取器** 的详细配置说明,帮助您从JSON响应中提取动态数据(如Token、ID等),用于后续接口请求: --- ### **1. JSON提取器的作用** - 从HTTP请求的JSON响应中提取特定字段的值,并存储为JMeter变量。 - 典型应用场景:提取登录后的Token、订单ID、用户信息等动态参数。 --- ### **2. 配置步骤** #### **步骤1:添JSON提取器** 1. 右键点击需要提取数据的**HTTP请求** → **添** → **后置处理器** → **JSON提取器**。 2. 界面关键字段说明: - **Names of created variables**:自定义变量名(如提取Token时,可命名`access_token`)。 - **JSON Path expressions**:填写JSON路径表达式(如`$.data.token`)。 - **Match No.**:匹配结果的序号(默认`1`表示第一个匹配项,`0`表示随机,`-1`表示全部)。 ![JSON提取器配置界面示例](https://example.com/jmeter-json-extractor.png) (注:示例图仅为示意,实际界面可能略有不同) --- #### **步骤2:编写JSON Path表达式** - **JSON Path语法**:通过路径定位JSON字段值,类似XPath。 - **示例JSON响应**: ```json { "code": 200, "data": { "user": { "id": 1001, "token": "abc123xyz" } } } ``` - **提取Token**:路径填写 `$.data.user.token`。 - **提取用户ID**:路径填写 `$.data.user.id`。 - **常用语法**: - `$`:根节点。 - `.` 或 `[]`:访问子节点(如`$.data`或`$['data']`)。 - `*`:通配符(如`$.data.*`匹配所有子字段)。 - `..`:递归搜索(如`$..token`搜索所有层级的`token`字段)。 --- #### **步骤3:使用提取的变量** - 在后续请求中,通过`${变量名}`引用提取的值: ```java HTTP请求头: Authorization: Bearer ${access_token} HTTP请求体: {"user_id": "${user_id}"} ``` --- ### **3. 调试与验证** #### **方法1:使用Debug Sampler** 1. 添**调试采样器**(Debug Sampler): 右键点击线程组 → **添** → **Sampler** → **Debug Sampler**。 2. 运行测试后,通过**查看结果树**检查调试结果,确认变量是否被正确提取。 #### **方法2:查看结果树** - 在**查看结果树**中选择对应的HTTP请求,检查: - **响应数据**:确认JSON结构是否与预期一致。 - **提取的变量值**:在`JMeter Variables`部分查看变量值。 --- ### **4. 常见问题与解决** | **问题** | **原因** | **解决方案** | |-------------------------|-----------------------------------|-----------------------------------------------------------------------------| | 提取值为空 | JSON路径错误或响应结构不符 | 使用在线工具(如 [JSONPath Tester](https://jsonpath.com/))验证JSON路径是否正确。 | | 变量未传递到后续请求 | 作用域错误(如提取器位置不对) | 确保JSON提取器在目标HTTP请求的子层级,且变量在后续请求的作用域内。 | | 匹配多个值时仅提取第一个| `Match No.`未设置为`-1`或指定序号 | 若需提取所有结果,设置`Match No. = -1`,变量会存储为`变量名_1`、`变量名_2`等。 | --- ### **5. 完整示例** #### **场景**:登录后提取Token,用于查询用户信息。 1. **登录请求**(POST /login): - 响应JSON: ```json {"code": 200, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"} ``` - **JSON提取器配置**: - 变量名:`auth_token` - JSON Path:`$.token` 2. **查询用户请求**(GET /user): - 请求头添: ``` Authorization: Bearer ${auth_token} ``` --- ### **6. 其他工具替代方案** - **正则表达式提取器**:如果响应不是标准JSON(如文本包含JSON片段),可使用正则表达式提取- **JSR223 PostProcessor**:通过Groovy脚本处理复杂JSON(如嵌套数组、动态键名)。 --- 通过以上步骤,您可以灵活使用JSON提取器处理动态参数,确保压测脚本的完整性和准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秦朝胖子得加钱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值