在 SoapUI Groovy 脚本中自动获取 XML 的子节点
Get XML's child nodes automatically in SoapUI Groovy Script
我在 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
}
像这样。任何解决方案?我深入研究了其他一些解决方案,但无法找到正确的 code/behaviour.
看起来您的用例是,您将组合所有属性,如姓名、姓氏等以及它们的值。
然后你将尝试检查 actual=expected !!
假设样本 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 代码将一起给出所有值。只需将 "first Step" 替换为您的步骤名称
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
请注意,这不是正确的验证方式,因为明天如果属性未通过或是可选的,则脚本将失败。
在 Gaurav khurana 的帮助下,我找到了解决方案。
如果我想获取正文中元素的所有值 containter.I,请执行以下操作:
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
获取元素名称的方法(在本例中"name surname age status"执行以下操作:
def gal = holder.getDomNodes("//" + space + "/*");
for (values in gal) {
log.info(values.getTagName());
}
我在 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
}
像这样。任何解决方案?我深入研究了其他一些解决方案,但无法找到正确的 code/behaviour.
看起来您的用例是,您将组合所有属性,如姓名、姓氏等以及它们的值。
然后你将尝试检查 actual=expected !!
假设样本 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 代码将一起给出所有值。只需将 "first Step" 替换为您的步骤名称
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
请注意,这不是正确的验证方式,因为明天如果属性未通过或是可选的,则脚本将失败。
在 Gaurav khurana 的帮助下,我找到了解决方案。
如果我想获取正文中元素的所有值 containter.I,请执行以下操作:
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
获取元素名称的方法(在本例中"name surname age status"执行以下操作:
def gal = holder.getDomNodes("//" + space + "/*");
for (values in gal) {
log.info(values.getTagName());
}