【问题标题】:How to get child node using context.expand in groovy?如何在groovy中使用context.expand获取子节点?
【发布时间】:2017-11-20 14:05:03
【问题描述】:

大家!

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

  1. SOAP 请求“创建”
  2. Groovy 脚本

请求内部:

<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>

【问题讨论】:

  • 你想达到什么目的?您将如何使用这些数据?
  • @Rao,我需要那个子节点,因为我要将它与具有不同父标签的重复交易进行比较 - 不是 ,而是
  • 您是否将一个响应与另一个响应进行比较?用例是什么?
  • 是的。因此,我们创建事务并希望重复此事务。我的用例是比较两者 - 后端是否正常工作并且标签是否相等,因为有时开发人员忘记添加不同的标签以重复操作。例如,开发人员忘记在重复响应中添加 y

标签: groovy soapui


【解决方案1】:

假设您的 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 更改为具有响应的步骤的名称

【讨论】:

  • 谢谢,很有帮助!我知道这种方式,但认为使用 context.expand 和 xpath 有一种更短的方法......
  • 感谢您将其标记为答案。你也可以投票。达到一定等级后即可看到
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多