我目前正在用ReadyAPI编写一些测试,以测试我们正在构建的新API。该API将以以下格式返回JSON:
{
"testJSON" : [
{
"test1" : "111",
"test2" : "ABC"
},
{
"test1" : "222",
"test2" : "DEF"
}
]
}
我添加了以下Groovy代码,该代码分解了JSON并列出了每个值:
import groovy.json.JsonSlurper
def jsonResp = context.expand( '${GetTest#Response}' )
def jsonElements = new JsonSlurper().parseText(jsonResp)
for ( value in jsonElements.testInput ) {
value.each{
log.info "${it.key}:${it.value}"
}
}
我想做的是获取此JSON响应并将其与数据的预定义列表进行比较(使用ReadyAPI中的数据源)。该数据源将包含一个名为“ test1”的列和一个名为“ test2”的列-这些将包含每个对象的所有期望值。因此,我们需要确保来自数据源的每个test1值都显示在响应JSON中。而且我们还要确认,对于每个“ test1”,我们都会获得正确的对应“ test2”。
因此在上面的示例中,我们想证明响应包含111和222的“ test1”值,对于111,我们得到了ABC等的“ test2”值。
上面的示例是我们新API的简化视图,实际上,它将包含更多的字段和更多的响应。因此,理想情况下,我不需要在Groovy脚本中硬编码特定值-这就是为什么我要使用数据表的原因。
有人对这种事情有任何经验,可以提出建议吗?
在此先感谢您的帮助,如果您需要更多信息,请告诉我。
干杯, 马特
答案 0 :(得分:1)
“ testJSON”是包含属性“ list1”和“ list2”的对象的列表。 您的数据源也是包含属性(列)“ list1”和“ list2”的对象(行)的列表。
使用嵌套的for循环将每个预期对象与响应中的每个对象进行比较。使用布尔值标志跟踪响应中是否缺少test1。找到test1后,检查test2的值。
这是基本轮廓。我假设test1是每个对象的唯一标识符。当您找到test1时,您可能还想退出内部循环,以提高效率。
for (element in datasource) {
def foundTest1 = false
for (response in testJSON) {
if (response.test1 == element.test1){
foundTest1 = true
assert response.test2 == element.test2
// assert any number of other properties here
}
}
assert foundTest1 == true
}