6

我是 SoapUI 的新手,刚刚配置了一个非常简单的 MockService。是否可以操纵响应,以便针对特定请求动态构建响应的元素?

场景一:

要求:

<record>
  <identifier>ID1</identifier>
</record>

回复:

<response>
  <child1>child 1</child1>
</response>

场景二:

要求:

<record>
  <identifier>ID2</identifier>
</record>

回复:

<response>
  <child2>child 2</child2>
</response>

这是一个简单的测试,我不需要它做任何比上面更多的事情。我目前正在执行以下操作以产生我想要的结果,但由于我对此完全陌生,我相信有更好的选择:

回复:

<response>
  ${dynElement}
</response>

Groovy 脚本:

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def holder = groovyUtils.getXmlHolder(mockRequest.requestContent)
def reqRef = String.valueOf(holder.getNodeValue("//identifier"))

def child1Text = "<child1>child 1</child1>"
def child2Text = "<child2>child 2</child2>"

if (reqRef == "ID1") {
  context.setProperty("dynElement", child1Text)
} else if (reqRef == "ID2") {
  context.setProperty("dynElement", child2Text)
}
4

2 回答 2

3

除了 xpath,您还可以使用 XmlSlurper。

def req = new XmlSlurper().parseText(mockRequest.requestContent)
def reqRef = req.record.identifier

无耻地从这个问题的答案中扯下来,请不要伤害我。

于 2010-11-23T19:16:40.000 回答
2

我用“罐头响应”和 xpath 查询来做到这一点。为此,您将在模拟服务中设置一系列调度处理程序,以匹配请求和响应。假设您有 Request1、Request2、Response1、Response2。使用“查询匹配”调度方法来匹配 XPATH 表达式。在该匹配项上,返回所需的响应。即,如果您在 xpath 中找到 ID1,则返回预设的 Response1。

此外,PRO 版本在 XPATH 方面做得很好,因此您不必手动编写代码。即,它可以查看对您想要触发的事物(在您的情况下为 ID1)的响应单击,并为您构建 XPATH 表达式。我申请了 PRO 许可证,就基于此。目前正在等待预算...

IMO,比弄清楚 groovy 更容易上手。

克里斯

于 2010-06-03T15:53:56.147 回答