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



我是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>

以下是同一的样本响应

<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,则脚本在声明/脚本框/区域中可见

以下是问题:

  1. XPATH和SCRIPT调度是否相同
  2. 如果没有,那么XPATH调度实际上是如何确定从所有形式的MockResponses列表中调度什么响应的

请帮我做这件事。

附言:我已经经历了http://www.soapui.org/soap-mocking/reference/mockoperation.htmlhttp://www.soapui.org/soap-mocking/mockoperations-and-responses.html

您在问题中提到的soapUI文档是获取信息的正确位置。然而,现有信息并不完整。

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

最初,我们混淆了XpathScriptDispatch方法。

以下是您正在寻找的其他信息:

XPATH和SCRIPT调度相同的吗

答案是。两者都是不同的

如果没有,那么XPATH调度实际上是如何在所有形式的模拟响应列表中确定要调度的响应的

文件中包含以下信息:

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调度模式提供的编辑器中进行编写

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'

希望您现在了解并区分脚本调度模式。

我认为造成这种混乱的原因是SCRIPTXPATH都显示了相同类型的编辑器。但里面的内容将完全不同。此外,如果选择SCRIPT调度模式,您可以很容易地在编辑器顶部看到日志、上下文、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

一个简单的测试可以是(区分两者),复制xpath的上述脚本并尝试测试,soap错误被接收到,说不知道groovyUtils。此测试将确认xpath脚本不同。

在这里,您可能不需要创建多个响应,因为上面的代码可以处理动态输入值并在响应中设置result减法操作的MockRepense可能如下所示,占位符${result}

脚本的MOCKRESPONSE:

<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>

希望这能澄清。

最新更新