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