我正在尝试使用Katalon Studio进行一些Web服务自动化。我一直在遵循本指南,了解如何使用jsonslurper解析返回的Json主体。
https://docs.katalon.com/katalon-studio/tutorials/parse_json_responses.html
如指南中所述,一切正常。我想看看是否可以使用junit断言,特别是使用assertEquals()获得更好的错误文本。
鉴于我们有这个
import groovy.json.JsonSlurper
String jsonString = '''{"menu": {
"id": "file",
"tools": {
"actions": [
{"id": "new", "title": "New File"},
{"id": "open", "title": "Open File"},
{"id": "close", "title": "Close File"}
],
"errors": []
}}}'''
JsonSlurper slurper = new JsonSlurper()
Map parsedJson = slurper.parseText(jsonString)
def array1 = parsedJson.menu.tools.actions
String onlickValue1 = ""
for(def member : array1) {
assertEquals("Open File", member.title)
break
}```
我遇到的麻烦是,我的断言在比较遇到的第一个标题元素(即“新文件”)时将引发错误。
我想要的是遍历数组中的所有元素,并针对所有元素声明我的期望值。如果我的期望值不存在,那么我会失败。
我觉得我丢失了一些东西,因为过去我们用java做过类似的事情,但是我在这里看不到它。
答案 0 :(得分:1)
所以我发现问题出在我的经验不足/无知。在网上寻找解决方案时,我无法绝对确定地理解我要实现的代码在做什么。我使用了一个for.each循环来针对我的期望值声明数组中的元素。对于与我的期望值不匹配的每个元素,哪一个当然是正确的失败了。因此,通过添加如下的if
语句使它起作用:
String expectedValue = ''
for(def member : array1) {
if (member.title=="Open File")
{
expectedValue = member.title
}
break
}
assertEquals("Open File", member.title)
我发现的一种更简单的方法是通过以下方式使用assertJ
assertThat(member).contains("Open File")
我知道有更好的解决方案可以实现我想要做的事情。但是出于这个问题的目的,我认为它已经解决了。