SOAPUI上下文变量-Groovy如何使其成为可能?

时间:2018-07-23 00:03:21

标签: groovy soapui

如果这是一个菜鸟问题,对不起您所有Groovy的家伙。

在SOAPUI中,我可以创建一个Groovy脚本,在其中可以为运行上下文定义一个任意变量以供以后检索。

context.previouslyUndefinedVariable = 3

def num = context.previouslyUndefinedVariable

Groovy的哪些功能允许将以前未定义的变量添加到这样的对象中?我想了解更多。

非常感谢!

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

被接受的答案对SoapUI的工作方式解释不佳。

在这种情况下,WsdlTestRunContext始终是某个SoapUI库Java类(例如Map)的实例,并且这些都是context.getClass()的实现。您可以检查assert context in Mapcontext.someUndef context.'someUndef' context[someUndef] context['someUndef'] context.getAt('someUndef')

当您在Map上查找属性时,Groovy使用getAt和putAt方法。您可以使用多种语法。所有这些都是等效的:

context.someUndef = 3
context.'someUndef' = 3
context[someUndef] = 3
context['someUndef'] = 3
context.putAt('someUndef', 3)

getAt()

我喜欢使用以上包含引号的任何内容,以便Groovy-Eclipse不会将其标记为缺少的属性。

有趣的是,Groovy在检查get方法(称为属性)之前先寻找"foo".class方法。

例如,考虑评估class。 String实例没有名为getAt(String)的属性,也没有方法getClass(),因此它尝试的下一步是寻找具有该名称的“ get”方法,即它找到了String,我们得到了结果:['class':'bar'].class

但是对于地图,getAt('class')首先是指方法调用'bar',它将是['class':'bar'].getClass()。如果我们想知道它是什么类型的地图,我们必须更加具体,并完整写出:LinkedHashMap,它将是getClass()

即使Map没有匹配的密钥,我们仍然必须指定['foo':'bar'].class,因为['foo':'bar'].getAt('class')仍然表示null,即{{1 }}。