2015-02-03 3 views
0

Gatling은 부하 테스트를 수행하는 훌륭한 도구이지만 DSL이 어떻게 든 당황하게합니다. 문제는 이미 사용자 지정 요청 및 모델 클래스가 있고 기존 클래스를 DSL로 이식하는 일종의 "브리지"클래스를 만들고 싶습니다. 여기 Gatling 2 DSL을 계측하는 방법

은 예입니다 : 암시 적 변환이 바로이 분명히 작동하지 않는 http(...).get(url)...

request 변환

exec { 
    val request = new GetIdRequest() 
    request.setCountry("US") 
    request // There is an implicit conversion 
    .check(status.is(200), bodyString.saveAs("ids")) 
}.exec { 
    session => 
    val ids = new ObjectMapper().readValue(session("ids").as[String], classOf[IdList]) 
    val request = new GetObjectRequest() 
    val request.setId(id(0)) 
    request // There is an implicit conversion 
     .check(status.is(200), bodyString.saveAs("object")) 
    session 
} 

,

  1. 세션이 불변이므로 " 개체 "값이 세션에 저장되지 않음
  2. request s ec exec이 실행되지 않았습니다. 에 직접 전달되지 않았습니다.

그럼 원하는 효과를 얻으려면 어떻게해야합니까? 채택 할 수있는 예가 있습니까? 아니면 내 자신의 ActionBuilder을 구현해야합니까 (다른 프로토콜을 작성하는 것과 같으므로이 작업을 수행하고 싶지 않습니다). 감사합니다

업데이트 1

이 내가 생각 해낸 솔루션입니다.

는 난 그냥 당신이 개틀링 DSL 구성 요소가 해결 불변 빌더이라는 것을 이해하지 않았다 무엇 HttpRequest

답변

0

를 생성하는 기능에 전달해야 그런 다음이 번역기 방법

def createHttp(name: String, req: Session => HttpRequest): HttpRequestBuilder = { 
    http(name) 
    .get { 
    session => req(session).getUri 
    } 
    .header("Content-Type", "application/json") 
    .header("Authorization", { 
    session => 
     val r = req(session) 
     Authorization.create("GET", r.getUri, appId, appKey) 
    }) 
} 

을 생성 시뮬레이션이로드 될 때 한 번만 체인으로 연결됩니다. 이와 같이

을 수행 할 수 있습니다

  • 도하는 세션 기능 내부 요청을 구축
  • 도 수동으로

그 실행시에 일어날 모든 세션, 즉에서 해결 된 일부 데이터를 전달 후에.

첫 번째 임원은 블록 내용이 정적이어서 요청이 실제로 한 번 작성되기 때문에 변경 가능한 디자인에 대해 조언을하지만 작동합니다.

두 번째 exec는 실제로 실행될 때마다 새 요청 작성기를 작성하지만 폐기됩니다.

정말로 자신 만의 DSL을 작성하려면 Gatling의 작동 방식을 받아 들여야합니다. setId과 같이 해결 된 값만 가져올 수는 없으므로 Expression도 사용할 수 있습니다.

모든 응답 본문을 저장하고 모든 실행에 대해 새로운 ObjectMapper를 만드는 방법은 번거롭고 비효율적입니다.

JsonPath 체크를 사용하여 관심있는 단일 ID를 간단히 가져온 다음 Gatling EL을 사용하여 다음 요청에 저장된 값을 주입 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 'Session => MyRequest' 타입의 매개 변수를 번역기 메소드에 전달함으로써 그 격차를 해소 할 수있는 방법을 발견했습니다. 번역기 메소드는 이것을 표현식으로 변환합니다. 이것은 꽤 잘 작동합니다. – stackoverflower

관련 문제