如何用JsonPath验证RestAssured返回结果中设备ID的数量?
验证RestAssured响应中设备ID的数量
响应载荷示例
{ "50": [ { "temperature": 7, "day": "2023-01-02" }, { "temperature": 6, "day": "2023-01-01" } ], "51": [ { "temperature": 8, "day": "2023-01-01" } ] }
该响应包含数据库中所有物理设备的数据,示例里存在ID为"50"、"51"的2个设备。
已实现的验证代码
在RestAssured测试中,已能通过以下代码验证响应中的具体项:
.body("'50'.size()", Is(2)) .body("'50'[0].temperature", Is(7))
需求
需要验证响应体中包含2个设备ID,但无需知晓具体ID值,求对应的JsonPath语法。
解决方案
因为返回的根结构是JSON对象,每个键对应一个设备ID,可通过以下两种方式验证数量:
- 直接验证根对象的键数量
.body("size()", Is(2))
这里的size()是Groovy对Map对象的方法调用,会返回根对象中键的总数,也就是设备ID的数量。
- 获取所有设备ID的集合后验证长度
// 需要导入Hamcrest的hasSize匹配器 .body("keySet()", hasSize(2))
keySet()会返回所有设备ID组成的集合,结合Hamcrest的hasSize()匹配器可直接验证集合长度是否为2。
如果需要额外验证设备ID的格式(比如是否为数字字符串),还可以扩展Groovy表达式:
.body("keySet().every { it.isNumber() }", Is(true))
内容的提问来源于stack exchange,提问作者Pascal
相关产品推荐
相关产品推荐

