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

How to compare a value with a list of values

我正在尝试执行断言,其中区域 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

原始回复:

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

                    "regionId": xxx

                }],

                "xxx": xxx
            },

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

    }]

谢谢

根据您的输出,hotelregionid 是一个列表列表

因此您可以使用 flatten 将其恢复为整数列表:

assert hotelregionid.flatten().every {it == hotelregionid_request}

这里是 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
    }
}