Groovy 验证 JSON 响应中是否存在某些值的脚本断言

Groovy script assertion that validates the presence of some values in a JSON response

所以我正在使用一个名为 ReadyAPI 的测试工具,并且它使用 Groovy 语言编写脚本。我不熟悉这种语言,而且它基于 Java 的事实不知何故使它变得更糟。

现在,我正在尝试使用断言来验证 JSON 中的 REST 响应,该断言会检查响应中是否存在某些元素。

这是我现在的代码:

import groovy.json.*

def response = context.expand( 'RequestResponseHere' )
def object = new JsonSlurper().parseText(response)

assert response.contains("CODE1")
assert response.contains("CODE2")
assert response.contains("CODE3")
assert response.contains("CODE4")

这个断言似乎有效,但我想知道是否有比写这么多行并减少它更简单的方法 'bulky'?

非常感谢任何帮助。

谢谢!

添加了一个我必须解析的 json 数据的示例: 我需要的是检查“代码”的值是否始终是可接受值列表的一部分 e.i。 CODE1、CODE2 等

{
    "_embedded": {
        "taskList": [
            {
                "code": "CODE1",
                "key": 123
            },
            {
                "code": "CODE2",
                "key": "234"
            },
            {
                "code": "CODE3",
                "key": "2323"
            },
            {
                "code": "CODE4",
                "key": "7829"
            },
            {
                "code": "CODE5",
                "key": "8992"
            }
        ]
    }
}

The assertion seems to work but I was wondering if there is maybe a simpler way to do it than to have to write so many lines and making it less 'bulky'?

不清楚什么是庞大的,但如果您想要减少语句的数量,您可以做的一件事是使用单个 assert.

而不是这个:

assert response.contains("CODE1")
assert response.contains("CODE2")
assert response.contains("CODE3")
assert response.contains("CODE4") 

你可以这样:

assert response.contains("CODE1") &&
       response.contains("CODE2") &&
       response.contains("CODE3") &&
       response.contains("CODE4") &&

如果你想检查那里是否有某些东西,你可以 DRY that 代码:

["code1","code2"].each{ assert response.contains(it) }

并且如评论中所述,如果您想确定“所有都在那里, 但我不关心订单”,提取值并进行比较 因为结果可以缩短这个:

assert response._embeded.taskList*.code.toSet() == ["code1", ...].toSet()

注意 *. 的使用,它是“扩展运算符”。基本上是 与 ...collect{ it.code } 相同。然后比较字符串集 剩下的(如果你比较的项目不多,这很好,因为 power assert 将打印失败断言中的所有项目;如果 你必须在大海捞针中找到众所周知的针,你会更好 写一些更聪明的东西来检查两组)。