SOAP UI:使用XML中的值来获取服务请求

时间:2017-03-04 02:32:44

标签: web-services soap groovy

有些人可以解释SOAP UI Free的最佳方式来实现以下场景

将来自一个Test Case Web服务的响应值作为请求值加载到第二个Test Case Web服务上。

在测试用例1脚本断言

import com.eviware.soapui.support.XmlHolder
def respXmlHolder = new XmlHolder(messageExchange.getResponseContentAsXml())
respXmlHolder.declareNamespace("ns1","http://www.moj.com/api/services/checkout")
def finsess = respXmlHolder.getNodeValue("//ns1:sessresp/ns1:sessionId")
log.info finsess
  

日志信息显示在70c8a6f80b6ff0c72502

下面

现在如何自动将上面的sessionid加载到Test Case 2 Web Service上,如下所示。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="http://www.moj.com/api/services/final">
   <soapenv:Header/>
   <soapenv:Body>
      <typ:FinSessionRequest>
         <typ:correlationId>1234</typ:correlationId>
         <typ:sessionId>70c8a6f80b6ff0c72502</typ:sessionId>
         <typ:username>abcd</typ:username>
         <typ:password>1234</typ:password>
      </typ:FinSessionRequest>
   </soapenv:Body>
</soapenv:Envelope> 

1 个答案:

答案 0 :(得分:0)

您可以使用属性转移测试步骤执行此任务,而无需使用Groovy脚本。点击SoapUI docs了解更多信息。您只需使用XPath选择源XML元素,类似于目标元素。当您执行测试步骤(或测试用例)时,SoapUI将执行替换。我建议使用这种方式,因为它是透明的。

如果确实需要使用Groovy脚本来传输值,可以在断言脚本中设置测试套件属性值:

def testSuite = context.getTestCase().getTestSuite()
testSuite.setPropertyValue("MyId", finsess)

然后将 MyId 放入您的请求消息中:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="http://www.moj.com/api/services/final">
   <soapenv:Header/>
   <soapenv:Body>
      <typ:FinSessionRequest>
         <typ:correlationId>1234</typ:correlationId>
         <typ:sessionId>${#TestSuite#MyId}</typ:sessionId>
         <typ:username>abcd</typ:username>
         <typ:password>1234</typ:password>
      </typ:FinSessionRequest>
   </soapenv:Body>
</soapenv:Envelope> 

只要两个测试用例属于同一个测试套件,就可以正常工作。

卡雷尔