【问题标题】:soapUI Dynamic mock service: How to extract response name from request parameter?soapUI 动态模拟服务:如何从请求参数中提取响应名称?
【发布时间】:2016-05-04 13:55:37
【问题描述】:

我正在尝试在 SoapUI 中构建一个模拟服务,该服务根据请求中传递的值动态返回响应。示例:

<foo>
     <bar>
        <ID>Response1</ID>  <--- I want to extract this
        <ReferenceID>stuff</ReferenceID>
        <CreationDate>2016-05-01T11:34:56Z</CreationDate>
     </bar>
</foo>

所以我将我的 DISPATCH 设置为 SCRIPT 并尝试了以下操作(返回值应指定返回的响应的名称):

def req = new XmlSlurper().parseText(mockRequest.requestContent)
return "${req.foo.bar.ID}"

还有这个:

def holder = new com.eviware.soapui.support.XmlHolder(mockRequest.requestContent )
def arg1 = holder.getNodeValue("ID") // also tried "//ID"
return arg1.toString();

两者都不起作用,模拟总是返回默认响应 - 希望你们中的一些人可以帮助我解决问题:)

【问题讨论】:

  • 可能是您的请求可能包含一些命名空间,因此当您尝试 //ID 时它可能会有所帮助。也许你想试试//*:ID
  • "//*:ID" 在我的第二种方法中起作用。谢谢饶:)

标签: xpath soap groovy mocking soapui


【解决方案1】:

问题可能是您的&lt;foo&gt; 响应包含在SOAP&lt;envelope&gt;&lt;body&gt; 中,因此您与XmlSlurper 一起使用的路径不正确req.foo.bar.ID

此外,如果在您的情况下,您的响应不是 &lt;envelope&gt;&lt;body&gt; 的包装,请注意在 XmlSlurper 中,root 节点从对象本身开始,因此不需要 req.foo,因为 &lt;foo&gt;是根节点,看下面的例子:

def xml = 
'''<foo>
     <bar>
        <ID>Response1</ID>
        <ReferenceID>stuff</ReferenceID>
        <CreationDate>2016-05-01T11:34:56Z</CreationDate>
     </bar>
</foo>
'''

def slurper = new XmlSlurper().parseText(xml)
println slurper.foo // prints nothing...
println slurper.bar.ID // prints Response1

因此,获取节点值的简单方法可能是使用find 方法,因此在您的 DISPATCH 脚本中:

def req = new XmlSlurper().parseText(mockRequest.requestContent)
return req.'**'.find { it.name() == 'ID' }

或者,如果您想使用XmlHolder 而不是XmlSlurper 作为@Rao cmets,只需在您的XPath 上使用命名空间。幸运的是 SOAPUI 允许您使用 * 作为命名空间的通配符,所以ID //*:ID 是正确的:

def holder = new com.eviware.soapui.support.XmlHolder(mockRequest.requestContent )
return holder.getNodeValue("//*:ID").toString()

希望对你有帮助,

【讨论】:

  • "//*:ID" 在我的第二种方法中起作用。谢谢 albciff :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多