使用 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
}
我想在 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
}