在SoapUI / ReadyAPI中使用Groovy,我试图将一个查询的结果传递给另一个查询的IN语句,以便能够针对结果运行断言。但是,我没有得到我想要的结果。
这是我现在拥有的。我从JDBC查询中获取groupNumber并将其传递给第一个查询以获取所有关联合同。我将这些结果保存到集合中。
然后我将该查询的结果转换为inStatement。我需要将结果用单引号括起来,用逗号分隔。
在那之后,对我来说事情变得艰难。目前,我将查询结果保存到集合中,也许这不是最好的方法吗?如果我尝试在查询中传递$ inStatement,我会得到一个空集合。如果我尝试传递我用于创建inStatement的代码,我会收到意外令牌的编译错误(这取决于我如何尝试传递代码,用双引号括起来,单引号等等但总是得到编译错误)。
这是我的代码:
def groupBillPolicies = []
sql.eachRow("SELECT column1 as column1 FROM table1 WHERE groupnumber = $groupNumber") {row ->
groupBillPolicies.add(row.column1)
}
String inStatement = groupBillPolicies.collect{"'$it'"}.join(",")
def sqlDataObjects = []
sql.eachRow("select trim(column2) as column2 from table2 where contract in ($inStatement) order by date desc fetch first 1 rows only") {row ->
sqlDataObjects.add(row.column2)
assert 'Validation Text' == row.column2
}
我在inStatement之后有log.info,看看会传递什么,看起来对我来说是正确的。每个值都用单引号括起来并用逗号分隔,但同样,将它传递给我的第二个查询会返回一个空集合。
我也尝试过以下代码,而不是在第一个查询中创建结果集合。
def groupBillPolicies = sql.rows("SELECT column1 as column1 FROM table1 WHERE groupnumber = $groupNumber")
这是以我无法使用的格式返回结果。
[[Column:Value], [Column:Value]]
我可以使用replaceAll从字符串中删除“Column:”,但我无法删除每个值周围的括号。
如何正确地将集合传入IN语句?
提前感谢您的任何帮助。
答案 0 :(得分:1)
这个怎么样?
def response = [["Column1":"Value1"], ["Column2":"Value2"]]
response.collect{ item ->
item.collect {
println "key : ${it.key}, value : ${it.value}"
}
}
我相信你可以在item.collect