Мы используем SoapUI для имитации веб-сервисов, чтобы протестировать наше приложение (APP), прежде чем мы получим доступ к реальным веб-сервисам.
Создать синхронную Mock Service, которая будет возвращать предопределенный ответ, просто. Однако я должен смоделировать некоторые асинхронные сервисы, в которые APP отправляет запрос, SoapUI немедленно отвечает подтверждением (например, SUCCESS), а затем через заданный интервал SoapUI перезвонит нашему приложению (APP затем выступая в роли сервера). Мне удалось сделать это с помощью контрольного примера, где первый шаг - MockResponse, затем задержка, а затем MockRequest (для вызова нашего приложения).
Вышеописанное работает нормально, но я бы хотел сделать это, написав сценарий прямо в Mock Reponse, чтобы избежать использования тестовых случаев. Мне удалось написать скрипт, который, когда Mock Service получает запрос, запускает обратный вызов.
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
Приведенный выше код фактически взят из события MockRunListener.onMockResult в SoapUI Pro. result.finish()
не работает.
Спасибо за любые советы!