Mockserver: обратный вызов после получения запроса

Я использую Mockserver для тестирования службы HTTP, которая асинхронно создает побочные эффекты. Скажем, например, я тестирую ServiceA, который предоставляет метод HTTP API в /api/status/{id}. Отдельно от возврата результата состояния вызывающей стороне API, ServiceA запускает асинхронный анализ, который вызывает ServiceB, если выполняются некоторые условия. Допустим, для завершения этого асинхронного процесса требуется от нескольких миллисекунд до нескольких секунд.

В настоящее время мой код mockserver выглядит примерно так:

Long waitTimeoutSeconds = 5L;
Long start = System.currentTimeMillis();
HttpRequest[] asyncRequestsRetrieved = null;

while (start + (waitTimeoutSeconds * 1000L) < System.currentTimeMillis()) {
    asyncRequestsRetrieved = mockServer.retrieveRecordedRequests(HttpRequest.request().withPath("/service/b/path"));
    if (asyncRequestsRetrieved != null && asyncRequestsRetrieved.size > 0) {
        break;
    }
    Thread.sleep(50L);
}

assertNotNull(asyncRequestsRetrieved);
assertTrue(asyncRequestsRetrieved!!.size > 0);

Предоставляет ли Mockserver шаблон для выполнения действия (скажем, уведомления слушателя), когда запрос получен в данной конечной точке, или это единственный вариант опроса?


person Nate Vaughan    schedule 22.02.2018    source источник
comment
github.com/awaitility/awaitility Я рекомендую использовать awaitility, в нем есть некоторые расширенные возможности для опроса и ожидания проверки, включая игнорирование определенных исключений. Спасет вас от написания собственного.   -  person Darren Forsythe    schedule 23.02.2018


Ответы (1)


Если вы отправляете запрос ServiceB в асинхронном режиме, вы получите некоторый ответ, в этом случае опрос является единственным вариантом. Я предполагаю, что ваш ServiceB имеет 2 конечные точки: одну для создания задания, а другую для проверки статуса задания, и если оно готово, то получить результат.

person Evilguy    schedule 22.02.2018