2011-10-26 162 views
2

我們使用SoapUI來模擬Web服務,在我們訪問真正的Web服務之前測試我們的應用程序(APP)。SoapUI嘲笑異步服務

創建一個將返回預定義響應的同步模擬服務非常簡單。然而,我必須模擬一些異步服務,其中APP發送請求,SoapUI立即以確認(例如SUCCESS)迴應,然後在預定義時間間隔之後SoapUI將調用我們的應用程序(APP隨後充當服務器)。我設法使用測試用例,第一步是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中,MockRunListener.onMockResult事件。 result.finish()沒有辦法。

感謝您的任何提示!

回答