在 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());
  }