soapui - 匹配响应值和请求值

时间:2015-02-12 21:49:18

标签: soapui assertion

我有像这样的SOAP请求

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://request.com" xmlns:dto="http://dto.com">  
  <soapenv:Header/>
  <soapenv:Body>
    <req:requestInput>
      ......
      <dto:correlationId>${=UUID.randomUUID().toString().replaceAll("-", "").toUpperCase().substring(0, 16);}</dto:correlationId>
      ......
    </req:requestInput>
  </soapenv:Body>
</soapenv:Envelope>

和上述请求的SOAP响应类似于

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:res="http://response.com" xmlns:dto="http://dto.com">
  <soapenv:Header/>
  <soapenv:Body>
    <res:responseOutput>
      ......
      <dto:correlationId>539A708FA1B44490</dto:correlationId>
      ......
    </res:responseOutput>
  </soapenv:Body>
</soapenv:Envelope>

这是我的主张 XPath表达式:

declare namespace env="http://schemas.xmlsoap.org/soap/envelope/";
declare namespace req="http://request.com";
declare namespace res="http://response.com";
declare namespace dto="http://dto.com";
//res:responseOutput/dto:correlationId/text()

预期价值:

${Request#//req:requestInput/dto:correlationId/text()}

错误:

XPathContains comparison failed for path [
declare namespace env="http://schemas.xmlsoap.org/soap/envelope/";
declare namespace req="http://request.com"; 
declare namespace res="http://response.com";
declare namespace dto="http://dto.com";
//res:responseOutput/dto:correlationId/text()], expecting [6F37EA93D0454E67], actual was [539A708FA1B44490]

我想检查是否在响应中返回了SOAP请求中的相关id中传递的值 执行此测试用例时,它在相关ID的SOAP请求中生成了539A708FA1B44490。 但在执行断言时,将再次评估correlationId的脚本,从而生成另一个id 我只想在请求中发送的有效负载中获取coorelation id,以便我可以进行比较。

我已经阅读了文件并寻找解决方案,但事实并非如此 我提前感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

当您的断言查找值${Request#//req:requestInput/dto:correlationId/text()}时,它实际上会再次执行${=UUID.randomUUID().toString().replaceAll("-", "").toUpperCase().substring(0, 16)} 。附注:不需要语句的分号。

为了达到你想要的效果,你需要只执行一次这个代码:

在测试用例设置脚本中,运行以下命令:

def uuid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase().substring(0, 16)
testCase.setPropertyValue('uuid', uuid)

将您的SOAP请求和XPath断言的更改改为使用:${#TestCase#uuid}