我在Ready API测试用例中使用groovy脚本来验证json Web服务响应中的结果。
我想使用一个变量(在数据源中指定)来指定我想要验证的json路径,因为这可能会在每次测试运行时发生变化。
以下代码正确地将路径results.address_components.long_name引用的所有数据分配给变量' actualResponseOne'
def actualResponseOne = jsonSlurper.results.address_components.long_name.collect()
但是,因为在同一个测试中我可能想要验证不同的json元素,即。 results.geometry.location_type例如我不希望在groovy脚本中对路径进行硬编码,而是将其设置在数据源中并将其分配给我脚本中的groovy变量..
def testElementOne1 = context.expand( '${DataSource-Groovy-GoogleMaps#testElement1}' );
如何在代码中引用此json路径,将数据分配给' actualResponseOne'?以下代码无效。
def actualResponseOne = jsonSlurper.${testElementOne}.collect()
非常感谢任何帮助。
的问候,
担。
答案 0 :(得分:0)
我理解的方式是GPath不会遍历点[见this stack overflow question和this Grovy language bug]。您可能必须打破Eval类以强制进行评估。也许是这样的?
ourPath = "results.address_components.long_name"
Eval.x( ourPath, "jsonSlurper.${x}.collect()" )
答案 1 :(得分:0)
使用Eval
的另一种方法是添加一个帮助方法来拆分路径并迭代遍历它:
class Nested {
static class A {
B b
}
static class B {
C c
}
static class C {
List list
}
static void main(String[] args) {
def a = new A(b: new B(c: new C(list: [1, 2, 3])))
println getNestedProperty(a, "b.c.list").collect { String.format "%03d", it }
}
static def getNestedProperty(def object, String path) {
path.split(/\./).each {
object = object."${it}"
}
return object
}
}
[001,002,003]