如何使用RestAssured校验JSON数组中指定参数的值
用RestAssured校验JSON数组中特定参数值的实用方案
嘿,针对你用RestAssured做API自动化测试时遇到的JSON数组参数校验问题,我结合你提供的JSON响应,整理了几种实用的校验方式,你可以根据需求选择:
1. 按数组索引直接定位元素校验
如果你明确知道要校验的元素在数组中的位置(索引从0开始),可以直接通过索引定位节点,然后校验参数值:
given() .when() .get("你的目标API接口地址") // 替换成你的实际接口地址 .then() .body("al[0].aid", equalTo(1464)) // 校验第一个元素的aid为1464 .body("al[1]._c", equalTo("Gurgaon,")); // 校验第二个元素的_c为"Gurgaon,"
这里用的是RestAssured支持的Groovy GPath表达式,通过al[N]定位数组中第N+1个元素,再加上参数名就能精准定位到要校验的字段。
2. 按条件过滤元素后校验
如果不知道元素的索引,只知道要校验的元素满足某个条件(比如aid等于某个值、pa为null),可以用Groovy的集合方法过滤后再校验:
given() .when() .get("你的目标API接口地址") .then() // 过滤出aid=1462的元素,校验它的_s字段值为"Haryana," .body("al.findAll { it.aid == 1462 }.first()._s", equalTo("Haryana,")) // 过滤出pa为null的元素,校验它的at字段值为1 .body("al.findAll { it.pa == null }.first().at", equalTo(1));
findAll { 条件 }会返回所有符合条件的元素集合,first()取集合中的第一个元素,之后就可以直接校验目标参数了。
3. 校验数组中所有元素的参数统一规则
如果你需要确保数组里所有元素的某个参数都满足同一规则(比如所有元素的pc都是122001),可以用everyItem匹配器:
given() .when() .get("你的目标API接口地址") .then() .body("al.pc", everyItem(equalTo("122001"))) // 所有元素的pc都是"122001" .body("al.fa", everyItem(containsString("Sona Road"))); // 所有元素的fa都包含"Sona Road"
everyItem会遍历数组中所有元素,断言每个元素的目标参数都符合指定条件。
4. 校验数组中存在符合条件的元素
如果只需要确认数组里至少有一个元素满足某个条件(比如存在lm为"omax mall"的元素),可以用any方法:
given() .when() .get("你的目标API接口地址") .then() .body("al.any { it.lm == 'omax mall' }", is(true)) // 存在lm为"omax mall"的元素 .body("al.any { it.fn == '225,' }", is(true)); // 存在fn为"225,"的元素
any { 条件 }会判断数组中是否存在至少一个满足条件的元素,返回布尔值,我们只需要断言它为true即可。
内容的提问来源于stack exchange,提问作者Suresh Sharma
相关产品推荐
相关产品推荐

