web-services - SoapUI 模拟异步服务

标签 web-services soapui

我们使用 SoapUI 模拟 Web 服务来测试我们的应用程序(APP),然后才能访问真正的 Web 服务。

创建将返回预定义响应的同步模拟服务很简单。但是,我必须模拟一些异步服务,其中 APP 发送请求,SoapUI 立即响应确认(例如成功),然后在预定义的时间间隔后,SoapUI 将回调我们的应用程序(然后 APP 充当服务器)。我设法使用测试用例来做到这一点,其中第一步是 MockResponse,然后是延迟,然后是 MockRequest(调用我们的应用程序)。

以上工作正常,但我想通过直接在模拟响应中编写脚本来避免使用测试用例。我设法编写了脚本,当模拟服务收到请求时,它将触发回调。

def project = result.mockOperation.mockService.project
// The API documentation doesn't say what finish is supposed to do but I try (doesn't help)
result.finish()
// Request that will be returned back - THE CALLBACK
def request = project.interfaces["LocationServicesOperation"].operations["ackLocation"].getRequestByName("Request 1")
sleep(4000)
request.submit(new com.eviware.soapui.impl.wsdl.WsdlSubmitContext(  ), false)

上面的问题是它会在发送初始请求的响应之前触发回调。我尝试在 SoapUI PRO 中使用事件处理,但无法正常工作。在 Wireshark 中,我可以看到这样的通信:
1) APP request -> SoapUI 
2) SoapUI callback -> APP
3) APP confirms 2) -> SoapUI 
4) SoapUI confirms 1) -> APP

但是它必须是:
1) APP request -> SoapUI 
2) SoapUI confirms 1) -> APP
3) SoapUI callback -> APP
4) APP confirms 2) -> SoapUI 

上面的代码实际上来自 SoapUI Pro 中的 MockRunListener.onMockResult 事件。 result.finish()不成功。

感谢您的任何提示!

最佳答案

我终于在 http://www.eviware.com/forum/viewtopic.php?f=5&t=3542&p=12474&hilit=asynchronous#p12474 找到了解决方案

诀窍不是直接从响应脚本中分派(dispatch)请求以将回调请求添加到测试,然后调用测试。这将导致模拟运行器首先发送对请求的响应,然后运行测试用例。

优点是测试用例是动态触发的,不需要一直运行。

关于web-services - SoapUI 模拟异步服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7901685/

相关文章:

jQuery Ajax 调用运行错误,但 firebug 显示 200 ok 并返回 json

java - 如何在 JAX-WS 客户端中实现 SOAP 处理程序

c# - 在 Visual Studio 2008 中调试 Web 服务时如何避免超时错误

testing - Groovy 脚本错误 : No such property while parsing the json

java - 加载 WSDL 时出现 SoapUI "failed to load url"错误

soapui - 无法读取改编的 Java Bean 属性 Soap ui

php - 将 XML SOAP 响应转换为 CSV

java - 是在 esb 内部还是在 esb 外部部署 web 服务

soapui - 如何在 SoapUI 中禁用授权?

groovy - 需要帮助 - SoapUi testRunner.getStatus() 无限期地返回状态 "RUNNING"