如何缩短用于标识数组中单个元素的json路径?

时间:2016-10-20 16:13:04

标签: java rest-assured

请假设以下回复

{
  "animals": [
    {
      "name": "hobba",
      "embeddedData": {
        "age": "3",
        "color": "white"
      }
    },
    {
      "name": "obba",
      "embeddedData": {
        "age": "1",
        "color": "yellow"
      }
    }
  ]
}

我需要断言数组中元素的存在是否具有特定值。我就是这样做的:

JsonPath jsonPath = response.jsonPath();
Assert.assertNotNull("Error message", jsonPath .param("name", "hobba").param("age", "3").param("color", "white").get("animals.find { a -> a.name == name && a.embeddedData.age == age && a.embeddedData.color == color"));

如您所见,我必须在我需要断言它的每个元素之前键入a.embeddedData。这只是一个例子,因为将有许多元素来断言它们的值。

是否有更易读和循环友好的方法来执行此操作? 另外,如果embeddedDataanimals中有数组,我怎样才能对animals中的每个元素执行断言?

1 个答案:

答案 0 :(得分:1)

您可以使用内置断言功能和匹配器检查正文:

.then()
    .assertThat()
    .root("animals.embeddedData")
    .body("age", Every.everyItem(Matchers.notNullValue()))
    .body("color", Every.everyItem(Matchers.notNullValue()))