SoapUI模拟服务/模拟操作中的XPATH调度

Sam*_*rth 2 xpath mocking soapui

我是SoapUI的新手,并试图了解XPATH调度在模拟服务中用于模拟操作的用法。

这是我到目前为止所做的

  1. 为计算器创建了模拟服务
  2. 添加了模拟运算减法

以下是该操作的示例请求

    <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>
Run Code Online (Sandbox Code Playgroud)

以下是针对相同内容的示例响应

<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>
Run Code Online (Sandbox Code Playgroud)

我能够了解其他调度,但不了解XPATH,因为以下是我在XPATH调度中输入的内容

declare namespace cal='http://www.parasoft.com/wsdl/calculator/';
declare namespace soapenv='http://schemas.xmlsoap.org/soap/envelope/';
//cal:subtract/cal:x
Run Code Online (Sandbox Code Playgroud)

还观察到,如果我已经使用过SCRIPT分派并从下拉列表切换到XPATH,则该脚本在声明/脚本框/区域中可见

以下是问题:

  1. XPATH和SCRIPT调度是否相同
  2. 如果不是,那么XPATH调度实际上如何工作以从所有MockResponses列表中识别出要调度的响应

请帮助我。

PS:我已经浏览过 http://www.soapui.org/soap-mocking/reference/mockoperation.html http://www.soapui.org/soap-mocking/mockoperations-and-responses.html

Rao*_*Rao 5

您在问题中提到的soapUI文档是获取信息的正确位置。但是,可用信息不完整。

搜索一段时间后,找到了详细信息。

最初,在XpathScript Dispatch方法之间感到困惑。

除了您要查找的内容以外,这里还有其他信息:

XPATH和SCRIPT调度是否相同

答案是否定的。两者都不一样

如果不是,那么XPATH调度实际上如何工作以从所有MockResponses列表中识别出要调度的响应

以下信息文档中找到:

XQUERY -这类似于QUERY_MATCH,但不是很厉害; XPath表达式应用于传入的请求,结果值用于选择要返回的MockResponse。在前面的搜索结果示例中,我们可以设置XPath表达式以选择一个搜索词,然后创建以每个期望值命名的MockResponses。好处是我们不需要为新的搜索条件添加新的XPath语句,只需添加另一个MockResponse。

假设您创建了多个回应说PositiveResponseNegativeResponseZeroResponse的操作模拟服务

这是您可能希望应用于请求并发送适当响应的示例条件。当然,您可能需要的数量就足够了。

  1. PositiveResponse -如果x,y值分别为10、5。
  2. NegativeResponse -如果x,y值分别为5、10。
  3. ZeroResponse -否则(如果以上都不满足,则为强制性)。

这是您需要在为XPATH Dispatch模式指定的编辑器中编写的方式

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'
Run Code Online (Sandbox Code Playgroud)

希望您现在知道并区分SCRIPT Dispatch模式。

我想造成混乱是因为SCRIPTXPATH都显示了相同类型的编辑器。但是其中的内容将完全不同。如果您选择SCRIPT Dispatch模式,您也可以轻松地在编辑器顶部看到一条消息,记录日志,上下文,mockRequest变量的可用性,并且在选择XPATH时该消息将消失。

只是给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
Run Code Online (Sandbox Code Playgroud)

可以进行一个简单的测试(以区分两者),将上面的脚本复制到xpath并尝试进行测试,并收到不正确的错误消息groovyUtils。此测试将确认xpath脚本不同。

在这里,您可能不需要创建多个响应,因为上述代码可以处理动态输入值并result在响应中设置。减法运算的MockReponse 可能看起来像下面,占位符${result}

脚本的响应:

<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>${result}</cal:Result>
      </cal:subtractResponse>
   </soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)

希望这可以澄清。