检查json响应值的每个实例的最动态方法是什么?匹配脚本断言中的另一个json响应值?
我的意思是说我在下面有以下回应:
{
"xxx": [{
"roomInformation": [{
"xxx": xxx
}],
"totalPrice": xxx
},
{
"roomInformation": [{
xxx: xxx
}],
"totalPrice": xxx
}
]
}
我想检查第一个房价是否与第一个totalPrice
匹配,第二个roomPrice
与第二个totalPrice
匹配。它必须是动态的,因为我可能会得到许多不同的实例,因此我不能简单地通过[0]和[1]查看json。实际检查每个roomPrice
匹配项及其对应的totalPrice
。
由于
答案 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' }