성능테스트

Gatling으로 성능테스트 하기

Junuuu 2023. 11. 20. 00:01
728x90

개요

성능테스트를 편하게 하는 방법을 찾다 보니 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/