我在SOAPUI工具中创建了一个带有两个断言的测试步骤,即
现在我需要使用groovyscript打印这些断言中包含的值。对于XQuery Assertion,我需要打印xquery表达式。我尝试使用getToken()方法。
以下是我的代码
for(int k=0;k<tc.getTestStepCount();k++)
{
RestTestRequestStep rr= tc.getTestStepAt(k);
RestTestRequest rrprop=rr.getTestRequest();
int astcount=rr.getAssertionCount();
for(int z=0;z<astcount;z++)
{
WsdlMessageAssertion tassert=rr.getAssertionAt(z);
String assertname=tassert.getName();
log.info "Assertion Name= "+assertname
String assertvalue=rr.getAssertionAt(z).getToken();
log.info "Assertion Value= "+assertvalue
}
}
但它引发了以下错误。
Fri May 22 11:11:58 IST 2015:INFO:groovy.lang.MissingMethodException: No signature of method: com.eviware.soapui.impl.wsdl.teststeps.assertions.basic.XQueryContainsAssertion.getToken() is applicable for argument types: () values: []
请建议我在这里使用哪种方法..
先谢谢。
答案 0 :(得分:0)
使用getPath()
方法获取断言的XQuery Expression
。考虑到此方法特定于XQueryContainsAssertion
类的断言,因此如果您在其他断言对象中调用,则会得到groovy.lang.MissingMethodException
。还要考虑使用您的代码,将testCase中的每个testStep转换为RestTestRequestStep
(RestTestRequestStep rr= tc.getTestStepAt(k);
),并将groovy testStep
本身作为testCase的一部分,并且不能转换为这种类型,因此最好使用def
对象来避免出现错误。
考虑到你只想在这种断言中应用你的代码,你可以考虑所有这些东西,你可能会有这样的东西:
import com.eviware.soapui.impl.wsdl.teststeps.assertions.basic.XQueryContainsAssertion
def tc = testRunner.testCase
for(int k=0;k<tc.getTestStepCount();k++)
{
def rr= tc.getTestStepAt(k)
// check that the testStep really contains assertions (it's not a groovy TestStep for example)
if(rr.metaClass.respondsTo(rr,"getAssertionCount")){
int astcount=rr.getAssertionCount()
for(int z=0;z<astcount;z++)
{
def tassert=rr.getAssertionAt(z)
String assertname=tassert.getName()
log.info "Assertion Name= "+assertname
// check the assert it's a XqueryContainsAssertion
if(tassert instanceof XQueryContainsAssertion){
String assertvalue=tassert.getPath()
log.info "Assertion Value= "+assertvalue
}
}
}
}
基于评论的编辑
如果你想得到http status codes
,你可以在类型ValidHttpStatusCodesAssertion
的断言中使用属性codes
,我修改前面的代码以考虑两种类型的断言:
import com.eviware.soapui.impl.wsdl.teststeps.assertions.basic.XQueryContainsAssertion
import com.eviware.soapui.security.assertion.ValidHttpStatusCodesAssertion
def tc = testRunner.testCase
for(int k=0;k<tc.getTestStepCount();k++)
{
def rr= tc.getTestStepAt(k)
// check that the testStep really contains assertions (it's not a groovy TestStep for example)
if(rr.metaClass.respondsTo(rr,"getAssertionCount")){
int astcount=rr.getAssertionCount()
for(int z=0;z<astcount;z++)
{
def tassert=rr.getAssertionAt(z)
String assertname=tassert.getName()
log.info "Assertion Name= "+assertname
// check the assert it's a XqueryContainsAssertion
if(tassert instanceof XQueryContainsAssertion){
String assertvalue=tassert.getPath()
log.info "Assertion Value= "+assertvalue
}else if(tassert instanceof ValidHttpStatusCodesAssertion){
String assertvalue=tassert.codes
log.info "Http status codes= "+assertvalue
}
}
}
}
希望这有帮助,