在我们访问真正的web服务之前,我们使用SoapUI来模拟web服务来测试我们的应用程序(APP)。
创建一个将返回预定义响应的同步模拟服务非常简单。但是,我不得不在应用程序发送请求的地方模拟一些异步服务,SoapUI立即响应确认(例如成功),然后在预定义的间隔后,SoapUI将调用我们的应用程序(然后应用程序充当服务器)。我成功地使用了测试用例,其中第一步是MockResponse,然后是延迟,然后是MockRequest (调用我们的应用程序)。
上面的方法很好,但我想通过在Mock Reponse中直接编写脚本来实现,以避免使用测试用例。我成功地编写了脚本,当模拟服务接收到请求时,它将触发回调。
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中的SoapUI事件。result.finish()做不到这一点。
谢谢你的建议!
发布于 2011-10-27 14:58:46
我终于在http://www.eviware.com/forum/viewtopic.php?f=5&t=3542&p=12474&hilit=asynchronous#p12474找到了一个解决方案
诀窍不是直接从响应脚本中分配请求,而是将回调请求添加到测试中,然后调用测试。这将导致模拟运行程序首先发送对请求的响应,然后运行测试用例。
其优点是测试用例是动态触发的,不需要一直运行。
https://stackoverflow.com/questions/7901685
复制相似问题