SoapUI-基于请求的动态MockResponse返回值

时间:2019-01-18 13:39:07

标签: soapui

出于测试目的,我需要在SoapUI中具有模拟响应,该响应根据请求返回动态值。也就是说,我正在发送一个对象的ID,以后在程序中需要使用该对象。

当我有这样的常规脚本时:

def holder = new com.eviware.soapui.support.XmlHolder( mockRequest.requestContent )
requestContext.exportId = holder.getNodeValue("//Uwid_exp")

模拟响应的一部分如下:

<Uwid_exp>${exportId}</Uwid_exp>

然后,当我通过SoapUI调用模拟服务时,它就起作用了。

但是,当我从我的应用程序远距离调用服务时(这是我需要测试的东西),然后模拟服务会返回空值。

根据MessageLog,入站请求如下所示:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <AKCEPTACE_PROTOKOL xmlns="https://ws.nrhzs.uzis.cz/NRHZS_WebService" xmlns:ns2="https://ws.nrhzs.uzis.cz/NRHZS_WebService/NRHZS_WebService.BussinesLayer.DTO" xmlns:ns3="http://schemas.microsoft.com/2003/10/Serialization/">
      <Ico>47114304</Ico>
      <Cpo>211</Cpo>
      <Uwid_exp>000119</Uwid_exp>
      <PDF_Potvrzeni>A</PDF_Potvrzeni>
    </AKCEPTACE_PROTOKOL>
  </soap:Body>
</soap:Envelope>

但是在出站部分,有:

<Uwid_exp></Uwid_exp>

我怀疑在这种情况下mockRequest.requestContent并未指出请求,因此脚本试图将值分配给${exportId}变量,但没有。但是到目前为止,我还无法详细说明要在XMLHolder对象定义中添加什么。

我在哪里找到实际收到的请求的内容?

1 个答案:

答案 0 :(得分:0)

因此,我在其他地方很快找到了解决方案。技巧似乎是在脚本中添加名称空间,然后使用它来处理元素

def holder = new com.eviware.soapui.support.XmlHolder( mockRequest.requestContent )
holder.namespaces['nrh'] = 'https://ws.nrhzs.uzis.cz/NRHZS_WebService'
requestContext.exportId = holder.getNodeValue("//nrh:Uwid_exp")
requestContext.CPO = holder.getNodeValue("//nrh:Cpo")
requestContext.ICO = holder.getNodeValue("//nrh:Ico")