soapui通用方式返回ok响应或mock中的错误

时间:2013-12-04 08:50:13

标签: web-services soap mocking soapui

我正在编写一个由许多不同的Web服务和操作组成的模拟服务,我需要一种通用的方法来决定我是否返回ok或fault。所有传入的请求共享相同的头,所以我可以在mockservice OnRequest脚本中读取它并将其设置为我稍后可以阅读的变量。 所以我的所有要求都有:

<SOAP-ENV:Header>
<ns:someValue xsi:type="xsd:string">12345</ns:someValue >
.... skipped
</SOAP-ENV:Header>

所以在OnRequest中我可以做类似的事情:

def holder = new com.eviware.soapui.support.XmlHolder( mockRequest.requestContent )
def arg = holder["//ns:someValue"]
if(arg == "12345"){
// set some variable to True
}else{
// set that variable to False
}

然后在实际的模拟操作中,我可以使用脚本调度策略来读取值并决定返回什么。无论如何。问题是我看不到在mock中声明变量的方法。不是模拟级别,也不是操作级别。我可以将脚本放到每个操作中,但由于会有很多操作,所以我不想复制粘贴它以防万一我需要更改它。 这是我的第一个模拟,很抱歉,如果我错过了明显的。有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:0)

我实际上错过了这里的明显。实际上,模拟服务中有一个自定义属性选项卡:

enter image description here

您可以使用以下方法调用它:

com.eviware.soapui.SoapUI.globalProperties.setPropertyValue( "isOk", arg )
log.info(com.eviware.soapui.SoapUI.globalProperties.getPropertyValue("isOk"))

您也可以使用OnRequest eventhandler:

result = new com.eviware.soapui.impl.wsdl.mock.WsdlMockResult(mockRequest)
String fault = SoapMessageBuilder.buildFault( "Server", "ErrorMsg" ,mockRequest.getSoapVersion() );
result.setResponseContent( fault );
mockRequest.getHttpResponse().getWriter().write( fault );

答案 1 :(得分:0)

更好的方法是使用MockService OnRequest事件处理程序:

import com.eviware.soapui.impl.wsdl.support.soap.SoapMessageBuilder

// Decision:
if( someCondition ){

    result = new com.eviware.soapui.impl.wsdl.mock.WsdlMockResult(mockRequest)
    String fault = SoapMessageBuilder.buildFault( "Server", "Message", mockRequest.getSoapVersion() );
    result.setResponseContent( fault )
    result.setMockOperation( result.getMockOperation() );
    mockRequest.getHttpResponse().getWriter().write( fault );
}