У меня есть приложение Scala, которое использует внешний веб-сервис RESTful для некоторой части своей функциональности.Мы хотели бы провести несколько тестов производительности приложения, поэтому мы заглушаем веб-сервис внутренним классом, который подделывает ответ.
Одна вещь, которую мы хотели бы сохранить, чтобы сделать тест производительности максимально реалистичным.насколько возможно, задержка сети и время ответа от удаленного хоста.Это между 50 и 500 мсек (мы измерили).
Нашей первой попыткой было просто сделать Thread.sleep(random.nextInt(450) + 50)
, однако я не думаю, что это точно - мы используем NIO, который не блокирует, иThread.sleep
блокирует и блокирует весь поток.
Есть ли (относительно простой / короткий) способ заглушки метода, который связывается с внешним ресурсом, затем возвращает и вызывает объект обратного вызова, когда готов?Кусок кода, который мы хотели бы заменить реализацией-заглушкой, выглядит следующим образом (используя AsyncHttpClient Sonatype), где мы оборачиваем его обработчик завершения в один из наших собственных, который выполняет некоторую обработку:
def getActualTravelPlan(trip: Trip, completionHandler: AsyncRequestCompletionHandler) {
val client = clientFactory.getHttpClient
val handler = new TravelPlanCompletionHandler(completionHandler)
// non-blocking call here.
client.prepareGet(buildApiURL(trip)).setRealm(realm).execute(handler)
}
Наш текущийреализация делает Thread.sleep
в методе, но это, как я уже сказал, блокирует и, следовательно, неправильно.