我正在比较来自两台不同服务器的JSON响应。它们应该基本匹配,但由于缓存,在温度、风速等领域有一些微小的差异。
目前,我正在使用自定义来忽略某些总是失败的字段,如:
JSONAssert.assertEquals(response2.getResponseBodyContent(), response1.getResponseBodyContent(),
new CustomComparator(JSONCompareMode.LENIENT,
new Customization("**.TimeStamp", {a, b -> true}),
new Customization("**.EpochTime", {a, b -> true})
));问题:
JSON样本:
JSON 1
"Temperature":{
"Metric":{
"Value":4.6,
"Unit":"C"
},
"Imperial":{
"Value":40.0,
"Unit":"F"
}
},
"Wind":{
"Direction":{
"Degrees":293,
"English":"WNW"
},
"Speed":{
"Metric":{
"Value":19.4,
"Unit":"km/h"
},
"Imperial":{
"Value":12.1,
"Unit":"mi/h"
}
}JSON 2
"Temperature":{
"Metric":{
"Value":5.1,
"Unit":"C"
},
"Imperial":{
"Value":43.0,
"Unit":"F"
}
},
"Wind":{
"Direction":{
"Degrees":271,
"English":"ENE"
},
"Speed":{
"Metric":{
"Value":19.9,
"Unit":"km/h"
},
"Imperial":{
"Value":12.4,
"Unit":"mi/h"
}
}我正在使用一个名为Katalon的测试工具,它支持groovy/java。任何帮助都将不胜感激。谢谢!
发布于 2019-12-02 14:28:01
我不知道Katalon,但我可以根据您展示的代码很好地猜测如何修复这个问题。此代码:
new Customization("**.TimeStamp", {a, b -> true})提供一个闭包,该闭包比较任何两个TimeStamp节点,作为a和b传递,并且始终返回true。这实际上忽略了比较中的TimeStamp (和EpochTime)。
为了实现您想要的结果,您只需要提供一个执行所需检查的闭包版本。
若要在10秒内返回true,请执行以下操作:
new Customization("**.TimeStamp", {a, b -> Math.abs(a - b) < 10 })例如。您需要检查数据的适当值-- TimeStamp可能是一个文本字符串,您需要首先将其解析为一个合适的Date对象。
闭包可以有多行代码,可以单独定义:
def fuzzyCompareTimeStamps = { a, b ->
def dateA = new Date(a).parse(<whatever>)
def dateB = new Date(b).parse(<whatever>)
def absoluteDifference = Math.abs(dateA - dateB)
return (absoluteDifference < 10)
}
new Customization("**.TimeStamp", fuzzyCompareTimeStamps)(这不是经过测试的代码,也不会像编写的那样工作;它只是给出解决方案的外观风格)。
https://stackoverflow.com/questions/59140519
复制相似问题