如何访问soap UI响应XML的属性值

时间:2016-03-17 07:04:32

标签: xml groovy soapui

我对Groovy&肥皂UI

我将响应XML作为

new File('c:/temp/dst.zip') << new File('c:/temp/src.zip').bytes

在Groovy脚本中,我想捕获属性值并将其传递给下一步。我应该如何捕捉?

groovy脚本在

下面
<carrierUDOResponse ReferenceId="" Result="SUCCESS" xmlns:xsi="" xsi:noNamespaceSchemaLocation="CarrierUDOReponse.xsd
        <errors>
            <error code="0" description="**i WANT TO ACCESS THIS**" property=""/>
        </errors>
        <warnings>
            <warning code="0" description="" property=""/>
        </warnings>
    </errorsAndWarnings>
</carrierUDOResponse>

2 个答案:

答案 0 :(得分:4)

这是一个groovy脚本,它使用xpath提取所需的描述属性。

看起来给定的xml是部分的,并且格式不正确。

为了向您展示如何提取数据,修改了一些xml片段。但基本上想法是一样的。

  • 创建XmlHolder
  • 应用xpath获取值
def xml='''<carrierUDOResponse ReferenceId="" Result="SUCCESS">
        <errorsAndWarnings>
        <errors>
            <error code="0" description="Description for code 0" property=""/>
            <error code="1" description="Description for code1" property=""/>
        </errors>
        <warnings>
            <warning code="0" description="" property=""/>
        </warnings>
    </errorsAndWarnings>
</carrierUDOResponse>'''
def holder = new com.eviware.soapui.support.XmlHolder(xml)
//use the xpath to retrieve the desctiption.
def descriptions = holder.getNodeValues("//*:errorsAndWarnings/*:errors/*:error/@description")
//logging the descriptions
descriptions.each{
    log.info "Error: $it"
}

此处变量descriptions包含错误说明列表。

我根据您的声明添加以下信息,您希望在以下步骤中使用这些说明。但是,您的用例的信息并不完全可用。希望以下内容也会有所帮助。

如果您希望此数据可用于下一步,则可能存在以下情况。但它可能会改变下一步真正需要数据的方式。 另请注意,此处列出了错误说明。

  • 在另一个groovy脚本中使用它: 可以使用context变量将数据/对象从一个groovy脚本步骤传递到其他groovy步骤。 例如,您可以在上面的groovy脚本中将描述添加到上下文中,以便在以下步骤中检索相同内容。

  • 在另一个测试请求步骤(肥皂/休息)中使用它:在这里您可以使用字符串数据,但不能以简单的方式使用真正的列表。

答案 1 :(得分:2)

@Rao提供了正确答案// get the response contenxt def content = context.expand('${Create_shipment#Response}') // parse the content def xml = new XmlSlurper().parseText(content) // get descriptions def descriptions =xml.depthFirst().findAll{it.name() == 'error'}*.@description descriptions.each{ log.info "description: $it" } ,仅提供和替代XmlHolder您可以使用XmlSlurper执行相同操作,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <node>unimportant</node>
  <node>
    <value>unimportant</value>
    <asdf>important</asdf>
  </node>
  <node>
    <value>unimportant</value>
    <value>unimportant</value>
    <qwerty>important</qwerty>
  </node>
</root>