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