그 기능의 일부로 외부 RESTful 웹 서비스에 의존하는 Scala 애플리케이션이 있습니다. 우리는 애플리케이션에 대한 성능 테스트를하고 싶습니다. 그래서 응답을 가짜로 만드는 내부 클래스로 웹 서비스를 완성합니다.모의 네트워크 지연이 비동기 적으로
우리가 가능한 한 현실적인 성능 테스트를 만들기 위해 유지하고자하는 한 가지 점은 원격 호스트의 네트워크 지연과 응답 시간입니다. 이것은 50 ~ 500msec (측정)입니다.
첫 번째 시도는 Thread.sleep(random.nextInt(450) + 50)
일 뿐이었지만 정확하지는 않습니다. NIO는 비 차단이며 Thread.sleep
은 전체 스레드를 차단하고 잠급니다.
외부 자원과 접촉하는 메소드를 스텁하는 방법이 있습니까? 그렇다면 준비가되면 콜백 객체가 반환되고 호출됩니다.
이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)
}
우리의 현재 구현하지 : 우리는 몇 가지 처리를 수행하는 우리 자신의 일에 완성 핸들러 객체를 래핑 (Sonatype의 AsyncHttpClient를 사용하여) 다음과 같이 우리가 스텁 구현을 대체하고자하는 코드의 비트가 방법에있는 Thread.sleep
하지만 그건 내가 말했듯이, 차단하고 따라서 잘못되었습니다.
그건 그랬어 - 완벽하게 작동해야합니다. 감사! – fwielstra