如何在groovy中使用context.expand获取子节点?

时间:2017-11-20 14:05:03

标签: groovy soapui

大家!

使用SoapUI 5.2.1和Groovy TestCase有2个测试步骤:

  1. SOAP请求"创建"
  2. Groovy脚本
  3. 请求中:

    <soapenv:Envelope ... >
     <soapenv:Header/>
     <soapenv:Body>
      <ban:transactions>
       <session>x</session>
       <type>y</type>
      </ban:transactions>
     </soapenv:Body>
    </soapenv:Envelope ... >
    

    内幕:

    def xml = context.expand('${create#request#//ban:transactions}')
    

    此脚本返回:

      <ban:transactions>
       <session>x</session>
       <type>y</type>
      </ban:transactions>
    

    我应该在脚本中更改什么,以便脚本可以返回我:

       <session>x</session>
       <type>y</type>
    

1 个答案:

答案 0 :(得分:0)

假设您的XML是,我们将在节点主体

下提取数据
<Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<hello>oye1</hello>
<ok>test</ok>
 <hello>oye2</hello>
<ok>test2</ok>
</Body>
</Envelope>

下面的groovy代码可以从xml中提取节点,提到它上面的节点。所以我们在这里尝试提取标记

下的节点
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def holder = groovyUtils.getXmlHolder("testStepName#Response")
def  responseXml=holder.getXmlObject()
String xmlObj=responseXml.toString()
String [] responseXmlObj=xmlObj.split('<Body>')[1].split('</Body>')
log.info responseXmlObj[0]

输出将为

Thu Nov 23 12:38:05 GMT+05:30 2017:INFO:
<hello>oye1</hello>
<ok>test</ok>
<hello>oye2</hello>
<ok>test2</ok>

您需要使用具有响应的步骤名称更改testStepName