使用 groovy 在 json 响应中断言键名

Assert key name in the json response using groovy

我想在 json 响应中声明一个密钥。

回应

{
  "availableRooms": [
    {
      "roomId": 2,
      "exchangeEmailId": null,
      "roomName": "Room 1",
      "floor": 0,
      "groupID": 3,
      "defaultCapacity": 8,
      "maxCapacity": 8,
      "attributes": [
        {
          "attributeID": 170,
          "displayName": "Video Conference Unit",
          "abbreviation": "VCU"
        }
      ],
      "externalRoomEmail": "vinay.jaiswal@condecosoftware.com"
    }
  ],
  "availableRoomsForAllDates": {},
  "callResponse": {
    "message": null,
    "customResponseCode": null
  }
}

Groovy

import groovy.json.JsonSlurper
def ResponseMessage = messageExchange.response.responseContent
def jsonSlurper = new JsonSlurper().parseText(ResponseMessage)
if( jsonSlurper.containsKey( 'externalRoomEmail' ) ) 
{
    log.info 'a'
}
else
{
    log.info 'b'
}

输出

Tue Nov 24 20:24:35 IST 2020:INFO:b

有内置方法吗?

如果我尝试 jsonSlurper.availableRooms.externalRoomEmail 然后它给我 null 但测试用例通过了。

我希望它在找不到密钥时破坏测试用例。

<编辑 - 重新阅读您的问题,相应调整答案>

首先我要调用你解析的 json json 而不是 jsonSlurper 因为 slurper 是 groovy class 用于解析 json 并且将数据命名为“slurper”在概念上令人困惑。

所以你的问题是 json.availableRooms returns 一个列表。换句话说,你必须使用类似的东西:

if(json.availableRooms.first().externalRoomEmail) { 
  ...
} else {
  ...
}

检查第一个房间是否定义了 externalRoomEmail

从那里取决于你想做什么。假设您想查看 任何 个可用房间是否定义了 externalRoomEmail,然后您可以执行以下操作:

def roomsWithEmails = json.availableRooms.findAll { it.externalRoomEmail }
if (roomsWithEmails) {
  roomsWithEmails.each { room ->
    println "room ${room.roomName} has external email ${room.externalRoomEmail}"
  }
} else { // no rooms with externalRoomEmail
  // do something else
}