Jmeter 야무지게 쓰는 법

koomin·2024년 12월 29일
11

부하 테스트

목록 보기
3/3
post-thumbnail

최근 JMeter를 사용하여 부하테스트를 진행하였다. 직접 JMeter 를 사용해보며 주의 해야할 점과 참고하면 좋을 만한 부분이 몇개 있어 공유하고자한다.

참고로 이 글은 JMeter 의 기본적인 사용방법을 설명하는 글은 아니다. 따라서 JMeter의 사용법을 전혀 모르시는 분이라면 구글링을 통해 사용법을 익히는 것을 추천한다. 아래에 처음 사용할때 읽어보면 좋은 링크를 첨부한다.

[Spring] JMeter 사용법 - JMeter란?, 테스트 방법

초보자도 따라할 수 있는 Apache JMeter 웹 성능 테스트 가이드

부하 테스트 시 GUI 를 사용하면 안된다.

터미널을 사용하여 jmeter 명령어를 치면 GUI 툴이 실행된다. 하지만 jmeter 에서는 부하 테스트 용도로 GUI 사용을 권장하지 않는다. 위 사진 처럼 Don't use GUI mode for load testing ! 문구가 표기된다. 따라서 GUI 는 테스트 시나리오를 작성하거나, 디버깅 할 때만 사용하도록 하자.

CLI 로 실행하는 법

jmeter -n -t [jmx file] -l [results file]
  • jmx file : JMeter 테스트 계획 파일의 경로를 넣는다.
  • results file : 테스트 결과 파일이 저장될 경로를 넣는다. ex) /home/result/load_test.csv
    • 파일의 확장자를 csv 로 적으면 csv 형식으로 저장된다.

결과를 HTML 리포트로 생성하기

JMeter 에서는 테스트 결과를 분석하기 쉽게 리포트 형식으로 만들어주는 기능이있다.

위와 같이 html 파일 형식으로 만들어주어 브라우저에서 쉽게 열어보고 확인할 수 있다. 대시보드에서는 평균 응답 시간, 최소 응답 시간, 최대 응답 시간, Throughput, Network, 에러 비율 등을 확인 할 수 있다.

또한 위 그래프들 처럼 꽤나 다양한 그래프를 제공 해주어 분석하는데 편하다.

리포트 생성하는 법

이미 부하 테스트를 진행해 결과 csv 파일이 생성된 경우

jmeter -g [results file] -o [report folder]
  • results file : 테스트 후 생성된 결과 파일의 경로
  • report folder : html 리포트가 저장될 폴더 경로

부하 테스트와 동시에 리포트까지 생성하는 경우

jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]

JMeter 에서 변수 값을 sh 스크립트의 변수로 설정하는 법

부하 테스트를 진행하면서 시나리오의 특정 값을 계속 해서 바꾸어 실행한다면 GUI 를 열어 값을 바꾸는 것이 상당히 번거롭다. 예를 들어 스레드 수를 각 테스트 마다 바꾸어 사용하는 경우가 있을 수 있겠다. 이런 경우는 바뀌는 값을 스크립트 변수로 할당해두면 편하게 테스트를 할 수 있다.

Number of Threads 값을 스크립트 변수로 할당하는 방법을 예시로 설명한다.

1. 필드를 변수로 설정

  • JMeter의 스레드 그룹 속성에서 Thread Count 필드를 변수로 설정한다. 예를 들어, ${THREAD_COUNT}로 설정한다.

2. User Defined Variables 추가

User Defined Variables 를 추가한다.

  • Test Plan 아래 Add > Config Element > User Defined Variables 추가.

  • Name: THREAD_COUNT
  • Value: ${__P(THREAD_COUNT, 10)}

(여기서 10은 기본값이다. CLI에서 전달된 값이 없을 경우 사용된다.)

3. CLI에서 변수 전달

jmeter -n -t [jmx file] -l [results file] -JTHREAD_COUNT=100

스레드 300, loop count 10 VS 스레드 30, loop count 100

JMeter 에는 부하 정도를 조절 할 수 있는 3가지 변수가 있다. Number of Threads, Ramp-up period, Loop Count 이다.

이때 스레드 300, loop count 10스레드 30, loop count 100 으로 설정 하면 어떤 차이가 있을까?

일단 두가지 경우 모두 요청은 300 * 10 = 3000, 30 * 100 = 3000 으로 총 3000개의 요청이 나가게 된다.

하지만 서버에 미치는 부하패턴에서 차이가 있다. 각각의 차이를 살펴보자.

스레드 300, Loop Count 10

300개의 스레드가 동시에 작동하므로, 특정 순간에 최대 300개의 요청이 한꺼번에 서버로 전송될 수 있다. 따라서 서버는 순간적으로 높은 동시성 부하를 처리하고, 트래픽이 짧은 시간에 몰리게 된다.

스레드 30, Loop Count 100

스레드 수가 30 이므로, 한 번에 동시에 보내는 요청 수는 30개로 제한된다. 따라서 30개의 스레드가 여러번 요청을 반복하므로, 서버에는 더 지속적이고 고르게 분포된 부하가 가해진다.

그래서 정리하자면 스레드 수가 많을수록 순간적인 동시성 부하고 높아지고, 스레드 수가 적을 수록 부하가 고르게 분포된다. 위 두가지 경우에 알맞은 경우를 예를 들자면 아래와 같다.

  • Burst Traffic(짧은 시간에 집중적으로 트래픽이 몰리는 경우) : 스레드 300, loop count 10
  • Sustained Traffic(지속적이고 일정한 트래픽 패턴) : 스레드 30, loop count 100

같은 요청이라도 다른 패턴이 만들어질 수 있으니 테스트 하고자하는 상황에 맞게 설정하는 것이 중요한것 같다.

끝으로 여러개의 부하테스트를 돌려야 된다면 sh 스크립트를 사용해서 자동화하는 것을 추천한다. 시간이 꽤나 걸리기 때문에 일일이 수동으로 테스트를 진행하면 낭비되는 시간이 많다.

profile
개발 지식 수집하기. 직접 경험해본 내용을 기록합니다.

0개의 댓글