我在SoapUI.groovy脚本步骤和SOAP请求步骤中有两个测试步骤。请求的正文如下:
<int:user>
<name>James</name>
<surname>Brown</surname>
<age>100</age>
<status>active </status>
</int:User>
我想在groovy脚本中生成一个字符串,它将包含正文的所有节点(在本例中为str = "namesurnameagestatus"
);和一个包含属性值的字符串; (在此示例中为str = "JamesBrown100active"
);我必须手动创建第一个字符串。对于第二个字符串我使用:
def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
def holder = groovyUtils.getXmlHolder(step.getPropertyValue("request") )
holder.getNodeValue("//name"); //for the name attribute
等
我想在循环中自动执行此过程。
例如:
object = Get Node Values of Body
count = object.size();
// some loop
for(count times){
object.get(i). get value;
//other code
}
像这样的东西。有解决方案吗我深入研究了其他一些解决方案,但无法找到正确的代码/行为。
答案 0 :(得分:2)
看起来你的用例是,你将结合所有属性,如姓名,姓氏等,以及他们的价值。
然后你会尝试检查是否实际=预期!!
让我们假设样本xml低于
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<ConversionRateResponse xmlns="http://www.webserviceX.NET/">
<name>James</name>
<surname>Brown</surname>
<age>100</age>
<status>active </status>
</ConversionRateResponse>
</soap:Body>
</soap:Envelope>
以下groovy代码将所有值组合在一起。只需更换&#34;第一步&#34;用你的步骤
的名字def gu=new com.eviware.soapui.support.GroovyUtils(context)
def res = context.expand('${First Step#response}')
//log.info res
def holder = gu.getXmlHolder(res)
def val=holder.getNodeValues("//*[local-name()='ConversionRateResponse']/*")
def allvalues=""
for(values in val)
{
allvalues=allvalues+values
}
log.info allvalues
上述代码的输出是
Sat Nov 25 15:57:31 IST 2017:INFO:JamesBrown100active
请注意,如果没有传递属性或者是可选的,则脚本将失败,这将不是明天的正确验证方式。
答案 1 :(得分:1)
在Gaurav khurana的帮助下,我找到了解决方案。
如果我想获取body containter中的所有元素值。我这样做:
def gu=new com.eviware.soapui.support.GroovyUtils(context)
def res = context.expand('${First Step#request}')
//log.info res
def holder = gu.getXmlHolder(res)
def val=holder.getNodeValues("//soap:Body/*")
def allvalues=""
for(values in val)
{
allvalues=allvalues+values
}
log.info allvalues
获取元素名称的方法(在本例中为“姓氏年龄状态”)如下:
def gal = holder.getDomNodes("//" + space + "/*");
for (values in gal) {
log.info(values.getTagName());
}