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

SoapUI模拟服务/模拟操作中的XPATH调度,xpath,mocking,soapui,Xpath,Mocking,Soapui,我是SoapUI新手,并试图了解XPATH分派在模拟服务中用于模拟操作的用法 以下是我迄今为止所做的工作 为计算器创建了模拟服务 添加了模拟操作减法 以下是该操作的示例请求 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cal="http://www.parasoft.com/wsdl/calculator/"> <soapenv:Header/&

我是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>
    
    还观察到,如果我已经使用了脚本分派并从下拉列表切换到XPATH,那么脚本在声明/脚本框/区域中是可见的

    问题如下:

  • XPATH和脚本调度是否相同
  • 如果不是,XPATH分派实际上是如何在所有表单MockResponses列表中识别要分派的响应的
  • 请帮我做这个

    附言:我已经经历过了

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

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

    最初,在XpathScript分派方法之间感到困惑

    以下是您需要的其他信息:

    XPATH和脚本调度是否相同

    答案是否定的。两者都不同

    如果不是,XPATH分派实际上是如何在所有表单MockResponses列表中识别要分派的响应的

    文档中的信息:

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

    假设您为模拟服务的减法操作创建了多个响应,如
    正响应
    负响应
    零响应

    以下是您可能希望应用于请求并发送适当响应的示例条件。当然,你可以有你想要的

  • 正响应
    -如果x、y值分别为10和5
  • 负响应
    -如果x和y值分别为5和10
  • ZeroResponse
    -否则(如果上述任何一项都不满足要求,则这是强制性的)
  • 下面是如何在为XPATH分派模式提供的编辑器中编写

    declare namespace class='1〕http://www.parasoft.com/wsdl/calculator/';
    如果(//cal:subtract/cal:x[.='10']和//cal:subtract/cal:y[.='5']),则
    “积极响应”
    其他的
    如果(//cal:subtract/cal:x[.='5']和//cal:subtract/cal:y[.='10']),则
    “消极反应”
    其他的
    “零响应”
    
    希望您现在了解并区分脚本调度模式

    我认为造成这种混乱是因为脚本和XPATH都显示了相同类型的编辑器。但里面的内容将完全不同。此外,如果选择SCRIPTDispatch模式,并且在选择XPATH时,它将消失,那么您可以很容易地在编辑器顶部看到一条消息,说明日志、上下文、mockRequest变量的可用性

    如果您对SCIRPT感兴趣,只需给出一个例子:

    def groovyUtils=new com.eviware.soapui.support.groovyUtils(上下文)
    def holder=groovyUtils.getXmlHolder(mockRequest.requestContent)
    def x=holder.getNodeValue(“//*:x”)作为int
    def y=holder.getNodeValue(“//*:y”)作为int
    context.result=x-y
    
    一个简单的测试可以是(为了区分两者),为xpath复制上面的脚本,然后尝试测试,soap fault收到的消息是不知道
    groovyUtils
    。此测试将确认xpath和脚本是不同的

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

    脚本的模拟响应:

    
    ${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>?</cal:Result>
          </cal:subtractResponse>
       </soapenv:Body>
    </soapenv:Envelope>
    
    declare namespace cal='http://www.parasoft.com/wsdl/calculator/';
    declare namespace soapenv='http://schemas.xmlsoap.org/soap/envelope/';
    //cal:subtract/cal:x