如何将值与值列表进行比较

时间:2017-02-26 14:59:13

标签: json rest groovy soapui

我正在尝试执行一个断言,其中区域id的每个实例都匹配请求中的区域ID。例如,如果在请求中输入数字'736',那么对于响应中的每个区域id实例,它们都应该是'736'。然而,当我在资产上执行时,它表明它是错误的并且我相信它是因为输出在列表中,所以==不起作用。如何获取请求,列表中的每个项目都形成匹配的响应?

以下是代码:

def hotelregionid = json.regions.hotels.regionId
assert hotelregionid != null
def hotelregionid_request = messageExchange.modelItem.testStep.testCase.testSuite.getPropertyValue("regionid")
assert hotelregionid.every {it == hotelregionid_request} -- this is where the assertion fails.

log.info hotelregionid
log.info hotelregionid_request

它输出的错误信息是:

assert hotelregionid.every {it == hotelregionid_request} | | | false [[xxx,xxxx,xxxx,xxxx,xxx,xxx,xxx,xxx,xxx]]

当我注释掉断言时提供的log.info与我将作为xxx的值相同。:

[[xxx,xxx,xxx,xxx,xxx,xxx,xxx]] - 这是hotelregionid

xxx - 这是hotelregionid_request

RAW响应:

{
    "xxx": [{
        "regionId": xxx,
        "xxx": [{
                "xxx": [{

                    "regionId": xxx

                }],

                "xxx": xxx
            },

            {
                "xxx": [{
                    "regionId": xxx
                }],
                "xxx": xxx
            }
        ]

    }]

谢谢

2 个答案:

答案 0 :(得分:1)

这是script assertion

请注意,在以下变量中定义预期值。

编辑:根据OP的完整回复更新回答here

//Change the value as needed
def expectedRegionId = 736
assert context.response, 'Response is null or empty'

def json = new groovy.json.JsonSlurper().parseText(context.response)

def sb = new StringBuffer()
json.regions.each { region ->
    assert region.regionId == expectedRegionId
    region.hotels.each { hotel ->
        assert hotel.regionId == expectedRegionId
    }
}

答案 1 :(得分:0)

从您的输出中,flatten是列表列表

因此,您可以使用assert hotelregionid.flatten().every {it == hotelregionid_request} 将其恢复为整数列表:

text-decoration: none!important;