gpt4 book ai didi

java - JSONAssert - 在指定范围内比较

转载 作者:行者123 更新时间:2023-12-02 09:14:08 24 4
gpt4 key购买 nike

我正在比较来自两个不同服务器的 JSON 响应。它们应该基本上匹配,但由于缓存的原因,在温度、风速等字段上存在一些细微的差异。

我目前正在使用自定义来忽略某些总是失败的字段,如下所示:

JSONAssert.assertEquals(response2.getResponseBodyContent(), response1.getResponseBodyContent(),
new CustomComparator(JSONCompareMode.LENIENT,
new Customization("**.TimeStamp", {a, b -> true}),
new Customization("**.EpochTime", {a, b -> true})
));

问题:

  1. 我将如何指定一个范围(温度可以在10)?
  2. 如何指定值只匹配某种类型(字符串、整数)?

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。任何帮助将不胜感激。谢谢!

最佳答案

我不了解 Katalon,但我可以根据您显示的代码很好地猜测如何解决此问题。这段代码:

new Customization("**.TimeStamp", {a, b -> true})

提供一个闭包,用于比较任意两个 TimeStamp 节点,以 ab 形式传递,并始终返回 true。这实际上在比较中忽略了 TimeStamp(和 EpochTime)。

要实现您想要的目标,您只需提供该闭包的一个版本来执行您想要的检查。

要在时间在十秒之内返回 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)

(这不是经过测试的代码,也不会按照编写的方式工作;它只是为了展示您的解决方案的外观)。

关于java - JSONAssert - 在指定范围内比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59140519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com