我有像这样的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,以便我可以进行比较。
我已经阅读了文件并寻找解决方案,但事实并非如此 我提前感谢你的帮助。
答案 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}
。