ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Gatling으로 성능테스트 하기
    성능테스트 2023. 11. 20. 00:01

    개요

    성능테스트를 편하게 하는 방법을 찾다 보니 Gatling이라는 부하 테스트 도구를 알게 되어 도입 및 적용사례를 공유하고자 합니다.

     

    Gatling이란?

    HTTP 서버 부하 테스트에 적합한 도구로 표현형 DSL을 기반으로 성능테스트를 작성할 수 있습니다.

    non blocking 방식을 활용하여 가상 사용자를 구현하며 이를 통해 리소스를 저렴하게 사용할 수 있습니다.

    수천 명의 가상사용자를 동시에 실행해도 문제가 되지 않습니다.

     

    지원되는 버전

    • JDK LTS버전에서 지원됨(8, 11, 17)

     

    gradle pulgin으로 Setup

    plugins{
    	id("io.gatling.gradle") version "3.9.5.1"
    }

     

    gradle 프로젝트에서 간단한 설정을 넣어주면 바로 사용할 수 있습니다.

     

    gradlew 빌드 후 모듈구성

    ./gradlew clean build

     

    위와 같은 명령어를 사용한 후 src 파일 하위에 gatling 디렉터리를 구성할 수 있습니다.

     

    파일명은 BasicSimulation으로 예제처럼 하였습니다.

     

    시나리오 작성

    import io.gatling.javaapi.core.CoreDsl.*
    import io.gatling.javaapi.core.Simulation
    import io.gatling.javaapi.http.HttpDsl.http
    
    class BasicSimulation : Simulation() { // 3
    
      val httpProtocol = http // 4
        .baseUrl("http://localhost:8080") // 5
        .doNotTrackHeader("1") //6
    
      val scn = scenario("BasicSimulation") // 7
        .exec(
          http("request_1") // 8
            .get("/stress-test")
        ) // 9
        .pause(5) // 10
    
      init {
        setUp( // 11
          scn.injectOpen(
            atOnceUsers(60) // 12
            //constantUsersPerSec(60.0).during(60) // 13
          )
        ).protocols(httpProtocol) // 14
      }
    }

     

    3 - Simulation을 상속받아 구현합니다.

    4- http request 공통 설정

    5 - 호출하고싶은 url 주소

    6 - http 헤더 설정

    7 - 시나리오 정의

    8 - http request의 이름 지정

    9 - 호출할 target 주소 및 http method

    10 - 잠시 대기 시간

    11 - 시나리오 정의로 scn이라는 이름으로 사용자를 주입함을 선언

    12 - 60번의 요청을 보냄을 의미

    13 - 60초동안 초당 60번의 요청을 보냄을 의미 총 3600번

    14 - 위에서 정의한 http 설정 주입

     

     

    Gatling 실행하기

     

    gradle에서 gatlingRun을 수행

     

    결과

    ================================================================================
    2023-11-05 13:33:22                                          10s elapsed
    ---- Requests ------------------------------------------------------------------
    > Global                                                   (OK=601    KO=0     )
    > request_1                                                (OK=601    KO=0     )
    
    ---- BasicSimulation -----------------------------------------------------------
    [######-------                                                             ]  8%
              waiting: 2999   / active: 300    / done: 301   
    ================================================================================

     

    3600번을 호출예시로 하였으며 중간중간 결과가 계속 나옵니다.

     

    최종적으로는 index.html 파일하나를 제공하여 보기 쉬운 페이지를 제공합니다.

     

    3600개의 request가 800ms 응답내에 모두 성공한 것을 확인할 수 있습니다.

     

     

    참고자료

    https://gatling.io/docs/gatling/

     

    댓글

Designed by Tistory.