如何在SoapUI groovy脚本中检测调用方实例?

如何在SoapUI groovy脚本中检测调用方实例?,groovy,soapui,Groovy,Soapui,SoapUI项目可以在加载时运行随机脚本。 使用日志和项目变量调用加载脚本。 在我的共享库中,我有一个方法-addAsserts(),它遍历整个项目,并向SOAP测试步骤添加模式符合性断言。在我的加载脚本中,我调用共享方法 addAsserts(this) 将“this”作为参数传递,并在addAsserts方法内将closure.delegate设置为该参数,以使“project”变量在闭包范围内可访问 addAsserts方法在sharedUtil.groovy中定义: static d

SoapUI项目可以在加载时运行随机脚本。 使用日志和项目变量调用加载脚本。
在我的共享库中,我有一个方法-addAsserts(),它遍历整个项目,并向SOAP测试步骤添加模式符合性断言。在我的加载脚本中,我调用共享方法

addAsserts(this) 
将“this”作为参数传递,并在addAsserts方法内将closure.delegate设置为该参数,以使“project”变量在闭包范围内可访问

addAsserts方法在sharedUtil.groovy中定义:

static def addAsserts(that){
        def closure={
            project.testSuites.each { testSuiteName, testSuiteObject -> 
                testSuiteObject.testCases.each { testCaseName, testCaseObject ->
                    testCaseObject.testSteps.each { testStepName, testStepObject -> 
                        if ("class com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStep" == testStepObject.getClass().toString() ) {
                            log.info "adding 'Schema Compliance' assertion to ${testSuiteName}/${testCaseName}/${testStepName}"
                            testStepObject.addAssertion('Schema Compliance')
                        }
                    }
                }
            }
        }//closure

    closure.delegate=that  // <--- i would like NOT to pass 'that' as parameter
                           // but rather detect in runtime with some kind of
                           // getCallerInstance() method
    return closure.call()
}
static def addAsserts(即){
def闭合={
project.testSuites.each{testSuiteName,testSuiteObject->
testSuiteObject.testCases.each{testCaseName,testCaseObject->
testCaseObject.testSteps.each{testStepName,testStepObject->
if(“class com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStep”==testStepObject.getClass().toString()){
log.info“将“架构符合性”断言添加到${testSuiteName}/${testCaseName}/${testStepName}”
testStepObject.addAssertion('Schema Compliance')
}
}
}
}
}//关闭

closure.delegate=that//不,我认为这是不可能的。Java中也没有(您可以使用找到调用类的名称/方法,但不能找到类本身的实例)


编辑 使用a可能是可能的(但我没有使用SoapUI的经验,所以我不知道这种技术是否适合)

假设我们有一个类
示例
定义如下:

class Example {
  String name
}
然后,我们可以编写一个与示例代码非常类似的类,在本例中,该类将设置闭包的委托,闭包将打印出委托的name属性(因为我们仅将委托设置为
delegate

稍后在我们的代码中,可以执行以下操作:

def tim = new Example( name:'tim' )

use( AssetAddingCategory ) {
  println tim.addAsserts()
}
这个会打印出来

Name of object: tim
Name of object: tim