我是SoapUI的新手,并试图了解在模拟服务中使用XPATH调度进行模拟操作。
这是我到目前为止所做的事情
以下是操作的示例请求
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cal="http://www.parasoft.com/wsdl/calculator/">
<soapenv:Header/>
<soapenv:Body>
<cal:subtract>
<cal:x>1</cal:x>
<cal:y>1</cal:y>
</cal:subtract>
</soapenv:Body>
</soapenv:Envelope>
以下是同一
的示例回复<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cal="http://www.parasoft.com/wsdl/calculator/">
<soapenv:Header/>
<soapenv:Body>
<cal:subtractResponse>
<cal:Result>?</cal:Result>
</cal:subtractResponse>
</soapenv:Body>
</soapenv:Envelope>
我能够了解其他调度但不了解XPATH,因为以下是我在XPATH调度中输入的内容
declare namespace cal='http://www.parasoft.com/wsdl/calculator/';
declare namespace soapenv='http://schemas.xmlsoap.org/soap/envelope/';
//cal:subtract/cal:x
还观察到,如果我已经使用了SCRIPT调度并从下拉列表切换到XPATH,则脚本在声明/脚本框/区域中可见
以下是问题:
请帮助我。
PS:我已经经历过了 http://www.soapui.org/soap-mocking/reference/mockoperation.html http://www.soapui.org/soap-mocking/mockoperations-and-responses.html答案 0 :(得分:4)
您在问题中提到的soapUI文档是获取信息的正确位置。但是,可用的信息并不完整。
搜索了一段时间后,找到了详细信息。
最初,在 Xpath 和脚本调度方法之间感到困惑。
以下是您要查找的其他信息:
XPATH和SCRIPT是否发送相同的
答案是否。两者都不同
如果没有,XPATH调度如何实际识别出从所有形式MockResponses列表中调度的响应
文档中的following信息:
XQUERY - 这类似于QUERY_MATCH,但功能不是很强大; XPath表达式应用于传入请求,结果值用于选择要返回的MockResponse。在我们之前的搜索结果示例中,我们可以设置XPath表达式以选择搜索项,然后创建以每个预期值命名的MockResponses。优点是我们不需要为新的搜索条件添加新的XPath语句,只需要另一个MockResponse。
假设您为模拟服务的减去操作创建了多个回复,例如PositiveResponse
,NegativeResponse
,ZeroResponse
。
以下是您可能希望在请求中应用并分发相应的响应的示例条件。当然,您可以拥有所需数量。
PositiveResponse
- 如果x,y值分别为10,5。NegativeResponse
- 如果x,y值分别为5,10。ZeroResponse
- 否则(如果以上都不满足,则必须这样做。)以下是您需要在 XPATH 调度模式
的编辑器中编写的内容declare namespace cal='http://www.parasoft.com/wsdl/calculator/';
if (//cal:subtract/cal:x[. = '10'] and //cal:subtract/cal:y[. = '5']) then
'PositiveResponse'
else
if (//cal:subtract/cal:x[. = '5'] and //cal:subtract/cal:y[. = '10']) then
'NegativeResponse'
else
'ZeroResponse'
希望您现在了解并区分 SCRIPT 调度模式。
我认为由于 SCRIPT 和 XPATH 都显示了相同类型的编辑器而产生的混淆。但其中的内容将完全不同。此外,如果选择 SCRIPT 调度模式,您可以在编辑器上轻松查看 log,context,mockRequest 变量可用性的消息,当 XPATH <时,它会消失/ strong>被选中。
如果您对此感兴趣,请提供 SCIRPT 示例:
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def holder = groovyUtils.getXmlHolder(mockRequest.requestContent)
def x = holder.getNodeValue("//*:x") as int
def y = holder.getNodeValue("//*:y") as int
context.result = x - y
一个简单的测试可以(区分两者),复制 xpath 的上述脚本并尝试测试并收到 soap fault ,说不知道{{ 1}}。此测试将确认 xpath 和脚本不同。
在这里,您可能不需要创建多个响应,因为上面的代码可以处理动态输入值并在响应中设置groovyUtils
。
减法操作的MockReponse可能如下所示占位符为result
。
脚本的MOCKRESPONSE:
${result}
希望这澄清。