如何检查值与json响应中的另一个correpsonding值匹配

时间:2017-02-26 16:05:27

标签: json rest groovy soapui

检查json响应值的每个实例的最动态方法是什么?匹配脚本断言中的另一个json响应值?

我的意思是说我在下面有以下回应:

   {
    "xxx": [{
            "roomInformation": [{

                "xxx": xxx

            }],

            "totalPrice": xxx
        },

        {
            "roomInformation": [{
                xxx: xxx
            }],
            "totalPrice": xxx
        }
    ]

}

我想检查第一个房价是否与第一个totalPrice匹配,第二个roomPrice与第二个totalPrice匹配。它必须是动态的,因为我可能会得到许多不同的实例,因此我不能简单地通过[0]和[1]查看json。实际检查每个roomPrice匹配项及其对应的totalPrice

由于

2 个答案:

答案 0 :(得分:2)

因此将Json作为变量:

import groovy.json.*

new JsonSlurper().parseText(jsonTxt).hotels.each { hotel ->
   assert hotel.roomInformation.roomPrice.sum() == hotel.totalPrice
}

然后我们可以使用以下脚本:

sum

如您所见,我正在使用cout << setprecision(16) << "w : " << w << "; semiw : " << semiw << endl; 将所有roomInformation.roomPrice值一起添加。在你的例子中,你只有一个价格,所以这将是好的..它还将涵盖你有多个房间加起来总计

的情况

答案 1 :(得分:1)

以下是script assertion检查每个roomPrice是否与totalPrice匹配。

编辑:基于OP提供的完整回复here

脚本断言

//Check if the response is not empty
assert context.response, "Response is empty or null"

def json = new groovy.json.JsonSlurper().parseText(context.response)
def sb = new StringBuffer()
json.regions.each { region ->
    region.hotels.each { hotel ->
        (hotel?.totalPrice == hotel?.roomInformation[0]?.roomPrice) ?: sb.append("Room price ${hotel?.roomInformation[0]?.roomPrice} is not matching with total price ${hotel.totalPrice}")    
    }
}
if (sb.toString()) {
    throw new Error(sb.toString())
} else { log.info 'Prices match' }