我对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>
答案 0 :(得分:4)
这是一个groovy脚本,它使用xpath
提取所需的描述属性。
看起来给定的xml是部分的,并且格式不正确。
为了向您展示如何提取数据,修改了一些xml片段。但基本上想法是一样的。
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>