2011-11-07 2 views
2

그 기능의 일부로 외부 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하지만 그건 내가 말했듯이, 차단하고 따라서 잘못되었습니다.

답변

1

ScheduledExecutorService을 사용하십시오. 앞으로 일정 시점에 실행되도록 일정을 계획 할 수 있습니다. Executors에는 상당히 간단하게 생성 할 수있는 팩토리 메소드가 있습니다.

+0

그건 그랬어 - 완벽하게 작동해야합니다. 감사! – fwielstra

관련 문제