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

时间:2016-01-07 14:24:21

标签: xpath mocking soapui

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

这是我到目前为止所做的事情

  1. 为计算器创建模拟服务
  2. 添加了模拟操作子
  3. 以下是操作的示例请求

        <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列表中发送的响应
    3. 请帮助我。

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

1 个答案:

答案 0 :(得分:4)

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

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

最初,在 Xpath 脚本调度方法之间感到困惑。

以下是您要查找的其他信息:

  

XPATH和SCRIPT是否发送相同的

答案是。两者都不同

  

如果没有,XPATH调度如何实际识别出从所有形式MockResponses列表中调度的响应

文档中的following信息:

  

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

假设您为模拟服务减去操作创建了多个回复,例如PositiveResponseNegativeResponseZeroResponse

以下是您可能希望在请求中应用并分发相应的响应的示例条件。当然,您可以拥有所需数量。

  1. PositiveResponse - 如果x,y值分别为10,5。
  2. NegativeResponse - 如果x,y值分别为5,10。
  3. ZeroResponse - 否则(如果以上都不满足,则必须这样做。)
  4. 以下是您需要在 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}

    希望这澄清。