-
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/
'성능테스트' 카테고리의 다른 글
spin lock 대신 Thread Waiting을 활용하면 성능이 얼마나 개선될까? (2) 2024.11.23 spin lock은 cpu에 얼마나 부하를 줄까? (3) 2024.10.07 [Mac] homebrew jmeter 설치 및 테스트 (0) 2023.11.19 Tomcat Thread의 수는 얼마나 늘리는게 좋을까? (1) 2023.08.09 JVM Memory Leak 만들고 탐지, 개선하기 (2) 2023.07.14