SOAPUI MockService:参数的 WSDL 验证?

问题描述 投票:0回答:2

我可以在网上找到我的问题的答案,所以我会问你们。

我使用此 WSDL 定义的副本 (http://www.webservicex.com/globalweather.asmx?WSDL) 使用 SoapUI 5.0 配置了 MockService。

我无法使用 PHP SoapClient 来测试 MockService:

        ini_set("soap.wsdl_cache_enabled", 0);
        $client = new \SoapClient("http://172.20.1.52:8088/mockGlobalWeatherSoap?WSDL", array('trace' => 1));
        $response = $client->__soapCall('GetCitiesByCountry', array());

但是,我开始尝试定义以确保某些方法的强制参数。

例如,我想确保 CountryName 成为 GetCitiesByCountry() 方法的强制参数:

  <s:element name="GetCitiesByCountry">
    <s:complexType>
      <s:sequence>
        <s:element minOccurs="1" maxOccurs="1" name="CountryName" type="s:string" />
      </s:sequence>
    </s:complexType>
  </s:element>

但是,无论我向 SoapUI 抛出什么,我的 MockService 总是会向我发送正确的响应,无论参数是否已提供。

有人可以向我解释一下,如何确保 SoapUi 中 WSDL 文件中描述的基本验证吗?

我花了几个小时,但在互联网上找不到任何相关答案。

提前非常感谢,亲切的问候,

R.

PS:我在 SoapUI 中尝试了同样的操作,发送一个缺少参数的虚拟肥皂请求,但 SoapUI 不在乎并向我发送回复。

php soapui
2个回答
0
投票

SoapUI 模拟模拟 WSDL 中的内容。它只会模拟响应。您必须配置 SoapUI 来模拟您想要的特定响应。

您尝试过 SoapUI 文档吗? http://www.soapui.org/Service-Mocking/simulated-complex-behaviour.html


0
投票

在 OnRequest 脚本选项卡中添加以下脚本,它将在发送模拟响应之前使用 WSDL 验证传入请求。

import com.eviware.soapui.impl.wsdl.support.wsdl.WsdlValidator
import com.eviware.soapui.impl.wsdl.panels.mockoperation.WsdlMockRequestMessageExchange

def wsdlcontext = context.mockService.getMockedInterfaces()[0].getDefinitionContext() 
def validator = new WsdlValidator(wsdlcontext);

def operation = mockRequest.soapAction.substring(mockRequest.soapAction.lastIndexOf('/') +1)
log.info  context.mockService.toString() + "::" + operation
def wsdlMockOperation = context.mockService.getMockOperationByName(operation)
 
def msgExchange = new WsdlMockRequestMessageExchange(mockRequest, wsdlMockOperation); 
def errors = validator.assertRequest(msgExchange, false);

if (errors.length > 0 ) {
    log.error  context.mockService.toString() + "::" + operation + " Request Validation Failed"
     throw new Exception("VALIDATION ERRORS: " + errors.collect(){ '\n' + it })
}

© www.soinside.com 2019 - 2024. All rights reserved.