[英]How to get xquery assertion value using groovy script
我在SOAPUI工具中创建了一个测试步骤,其中包含两个断言
现在,我需要使用groovyscript打印这些断言中包含的值。 对于XQuery断言,我需要打印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: []
请建议我在这里使用哪种方法。
提前致谢。
使用getPath()
方法获取断言中的XQuery Expression
。 考虑到此方法特定于XQueryContainsAssertion
类的断言,因此,如果在其他断言对象中调用,则会得到groovy.lang.MissingMethodException
。 还要考虑一下代码,您要将testCase中的每个testStep都转换为RestTestRequestStep
( RestTestRequestStep rr= tc.getTestStepAt(k);
),而常规的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
}
}
}
}
希望这可以帮助,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.