JMeter json列表多条件断言使用详解(二次开发)

一、插件下载地址:

百度网盘链接:https://pan.baidu.com/s/10sb74CzUIBR-f7WMPhbnJA
提取码:75f4

二、使用条件

1.JMeter版本为3.3(在JMeter3.3的基础上开发);
2.将jar包放置到目录…\lib\ext下重启JMeter即可;

三、插件使用说明:

1.安装插件,启动JMeter后断言新增了一个菜单项【Json List Element Assertion】,如下图:
在这里插入图片描述

2.断言【Json List Element Assertion】使用示例:
接口响应结果如下图:
在这里插入图片描述
需求:断言返回结果items列表中有一条记录能同时满足gName=个人文件、name=1234567891、size=0三个条件
示例如下:
在这里插入图片描述
说明:通过Json List Path这一项参数定位到整个列表,然后对列表进行遍历,通过Json Path查询结果和预期Json Value值比较进行断言,列表遍历某一项同时满足三组条件,则断言成功,否则断言失败。

注意:三组条件不能全为空。

<think>我们正在讨论JMeter中的JSON断言使用方法。用户希望了解如何在JMeter使用JSON断言来验证接口响应。 根据引用,我们知道JSON断言JMeter中用于检查JSON响应的一种断言方式。它使用JsonPath表达式来定位JSON文档中的特定元素,并验证其值是否符合预期。 步骤: 1. 添加JSON断言:在JMeter中,选择需要添加断言的HTTP请求,右键选择“添加” -> “断言” -> “JSON断言”。 2. 配置JSON断言: - Assert JSON Path exists: 填写JsonPath表达式,用于定位要检查的元素。 - Additionally assert value: 如果需要检查值,则勾选此项,然后在“Expected Value”中填写期望值。 - Match as regular expression: 如果期望值是一个正则表达式,则勾选此项。 - Invert assertion: 如果希望断言结果取反(即当元素不存在或值不匹配时通过),则勾选此项。 3. 验证JsonPath表达式:可以使用JMeter的“查看结果树”中的“JSON Path Tester”来测试JsonPath表达式是否正确定位到元素。 引用中提供了JsonPath的基本语法(引用[5]): - `$` 表示根节点 - `@` 当前节点(在过滤表达式中使用) - `.` 子节点操作符 - `..` 递归下降,不管位置 - `[,]` 支持迭代器中做多选 - `?()` 过滤操作 - `[]` 迭代器或数组索引 - `()` 表达式计算 - `*` 通配符,匹配所有元素 示例:假设我们有如下JSON响应: ```json { "store": { "book": [ { "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95 }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99 } ], "bicycle": { "color": "red", "price": 19.95 } } } ``` 我们想要验证第一本书的价格是8.95,可以使用JsonPath表达式:`$.store.book[0].price`,期望值为8.95。 另外,引用[3]和[4]提到,接口测试中JSON报文是主流,因此掌握JsonPath和正则表达式非常重要。 现在,根据用户的问题,我们将详细介绍JSON断言使用方法。</think>### JMeter JSON断言使用方法详解 JSON断言JMeter中用于验证JSON响应数据的核心组件,通过JsonPath语法定位和验证特定数据元素。以下是详细使用方法: #### 一、添加JSON断言 1. 右键点击HTTP请求 → 添加 → 断言 → **JSON断言** 2. 配置关键参数: - **Assert JSON Path exists**:填写JsonPath表达式(必填) - **Additionally assert value**:勾选后验证具体值 - **Expected Value**:输入期望值(勾选值验证时必填) - **Match as regular expression**:启用正则匹配 - **Invert assertion**:结果取反(正常存在时失败) #### 二、JsonPath语法核心规则 | 符号 | 含义 | 示例 | 说明 | |------|-----------------------|-------------------------------|--------------------------| | `$` | 根节点 | `$.data` | 获取根下的data字段 | | `.` | 子节点 | `$.user.name` | 获取user下的name字段 | | `[]` | 数组索引/筛选 | `$.items[0].id` | 获取第一个item的ID | | `..` | 递归搜索 | `$..price` | 搜索所有层级的price字段 | | `?()`| 条件过滤 | `$.books[?(@.price<50)]` | 筛选价格低于50的书籍 | | `*` | 通配符 | `$.departments[*].name` | 所有部门的名称 | #### 三、实战操作步骤 1. **定位元素**(使用JSON Path Tester验证): - 在**查看结果树**中切换响应为**JSON Path Tester** - 输入JsonPath表达式 → 点击**Test**验证结果 ```json // 示例响应 { "status": 200, "data": { "users": [ {"id": 101, "name": "Alice"}, {"id": 102, "name": "Bob"} ] } } ``` - 验证表达式:`$.data.users[0].name` → 返回`Alice` 2. **配置断言**: - 验证状态码:`$.status` → 期望值`200` - 验证用户名:`$.data.users[1].name` → 期望值`Bob` - 验证ID存在:`$..id` → 不填期望值(仅检查路径存在) 3. **高级用法**: - 正则匹配:`$..name` + 期望值`A.*` → 匹配以A开头的名字 - 多值验证:`$.data.users[*].id` → 期望值`101,102`(逗号分隔) - 空值检查:`$.nonexist` + 勾选`Invert assertion` → 确保字段不存在 #### 四、调试技巧 1. **结合响应断言**:添加**响应断言**验证HTTP状态码(如`200`) 2. **失败诊断**: - 在**查看结果树**中查看断言失败的具体路径 - 使用在线工具验证JsonPath:[JSONPath Online Evaluator](https://jsonpath.com/) 3. **性能优化**: - 避免深层递归(如`$..`)影响性能 - 优先使用精确路径而非通配符 > 关键提示:JSON断言仅验证数据结构,**HTTP状态码需用响应断言单独验证**。对于XML响应,请改用XPath断言[^3][^5]。 --- ### 相关问题 1. JsonPath与XPath语法有哪些核心区别? 2. 如何用JSON断言验证动态生成的JSON数组? 3. JMeter中正则表达式断言JSON断言如何选择? 4. 接口返回非JSON数据(如XML)时应使用哪种断言? 5. 如何验证JSON响应中的嵌套对象和空值? [^1]: JSON断言依赖于JsonPath语法,可通过内置工具验证表达式有效性 [^3]: 在察看结果树中切换至JSON Path Tester可实时调试路径 [^5]: JsonPath的`?()`过滤语法支持复杂条件验证,如数值范围检查
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值