出于测试目的,我需要在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
对象定义中添加什么。
我在哪里找到实际收到的请求的内容?
答案 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")