Jmeter 시나리오를 활용하여 부하테스트 진행해보기
0. 개요
- 해당 글은 시나리오 기반 jmx 파일이 있다는 가정 하에 작성되었습니다.
- 목차
- 테스트 실행 준비하기
- 테스트 실행 및 부하 적용하기
- 테스트 진행 모니터링
- 보고서 파일 생성하기
시나리오 사전 설명
- 하기 서술되는 내용 대상이 되는 시나리오 설명입니다.
- 내용 : TOBE / ASIS 간의 성능 비교를 위한 부하 테스트 시나리오
- 부하 시나리오 : 스레드 수를 점진적으로 늘려가며 서버에 부하 작용
- 리스너 세팅 : Summary report(지표값 확인) 및 Result tree(에러 내용 확인)를 활용한 테스트 모니터링
- 보고서 세팅 : Jmeter의 'jp@gc' 기능을 활용하여 그래프 자동 생성 및 Jmeter 내장 기능을 통한 HTML 리포트 생성
1. 테스트 실행 준비
- 사본 시나리오(.jmx) 불러오기
(1) Jmeter GUI 실행하기
C드라이브(C:\)에 있는 '성능점검' 폴더로 들어간 뒤 'jmeter-custom' 파일을 실행합니다.

(2) 시나리오 불러오기
시나리오 파일( (C:\scenario\{xxx}.jmx)을 GUI로 드래그하여 불러옵니다 (or Jmeter에서 'open' 버튼을 통해 jmx파일 열기)


- 테스트 환경 및 기본 설정 확인
(1) 시나리오 기본 변수 확인 및 수정하기
최상단 아이콘(플라스크 모양 - x2bee)를 클릭하면 설정이 되어있는 전역 변수를 확인할 수 있습니다.
올바르게 세팅 되어있는지 확인합니다. (ex. TOBE 서버 테스트 시 'target' : '.tobe' 로 설정되어 있는지 등)

(2) 시나리오 세팅값 확인
'+' 를 눌러서 하위 속성 확인.
- 'API목록 (통합테스트)'(톱니바퀴 모양)이 활성화 되어 있는지 확인
- 회색 표시 : 비활성화 상태
활성화 필요 시 '우클릭' → 'enable / disable'
- 컨트롤러(흰색 네모칸에 파란색 점 2개)가 활성화 되어 있는지 확인
- Thread Group Report ~~ : 리포트 생성을 위한 스크립트 세팅
- Workload 별 가중치 (분산) : 전체 시나리오
- 단위 업무 + 스트레스 테스트 : 전체 시나리오 중 일부분만 가져와서 테스트 하기 위한(ex. 단위 업무 테스트) 컨트롤러

2. 테스트 실행 & 부하 적용
- 스레드 설정, Ramp-up 등 기본값 점검
(1) 'API목록 (통합테스트)' 를 클릭하여 Thread 설정 값을 확인
'총 스레드 수', '부하 시간' 등의 설정을 확인합니다.

- 테스트 실행 방법


- 유의 사항 및 체크포인트
3. 모니터링 및 리소스 확인
- 주요 JMeter 리스너(Listerner)
(1) 'Summary Report'
스레드 추가 및 Request가 진행되면서 나타나는 지표를 확인할 수 있습니다.
주요 항목 :
- Average : 평균 응답 속도
- Error % : 에러율
- Throughput : TPS

(2) 'View Results Tree'
Request 정보(헤더, 바디, URL 등)와 Response(응답 코드, 메시지, 헤더, 바디 등)의 정보를 볼 수 있습니다.
Summary Report를 모니터링 하다가 'Error %'가 0퍼보다 높게 나타났다면 원인 분석이 필요합니다.
이러한 경우에 View Results Tree 리스너를 사용하여 응답 값을 실시간으로 확인할 수 있습니다.
- 리소스 모니터링 포인트
(1) 'Summary Report'
- 에러가 발생하진 않는지?
- Request는 정상적으로 분산되어 들어가는지?
- TPS가 올라가고 있는지?
(2) 'View Results Tree'
- 에러 응답 코드가 어떤 것인지?

4. 보고서 생성 및 분석
결과 파일 저장 기본 설정
- HTML 대시보드 리포트 생성 방법 (명령어 포함)
(1) 리포트 생성
Jmeter에 내장되어 있는 리포트 생성 기능을 사용할 것입니다.
우선 결과 파일을 확인합니다. (경로 : C:\성능점검\result)

사전에 세팅된 형식 (data-yyyymmdd{time})에 따라서 저장 되어있습니다.
뒤에 있는 숫자 부분을 미리 복사해놓습니다.
이후 'CMD'를 실행하여 아래 명령어를 수행합니다.

기본 명령어는 'jmeter -g' 이므로 경로에 유의하여 진행하면 됩니다.
(${복사한 숫자} 부분에 미리 복사해둔 숫자를 입력합니다.)
('성능점검' 폴더가 'C:\'에 제대로 들어가 있다면 아래 명령어 그대로 실행)
cd C:\성능점검\apache-jmeter-5.6.2\bin
jmeter -g ./../../result/data-${복사한 숫자}/resulttable-result.csv -o ./../../result/html-report-${복사한 숫자}
- 보고서 구성 요소
(1) Dashboard
수행 시간 및 Request 성공 여부(원 그래프)로 나타납니다.
아래로 스크롤하면 Summary Report 리스너를 통해 확인했던 표가 나타납니다.


(2) Charts
- Jmeter의 그래프 생성을 활용하여 자동 생성됩니다.
- 주요 그래프 1 : Over Time - Response Time Percentiles Over Time (successful responses)
: 시간대별 평균 응답 시간
- 주요 그래프 2 : Throughput - Total Transactions Per Second
: 시간대별 TPS
- 주요 그래프 3 : Throughput - Response Time Vs Request
: 요청 수별 응답 시간
+@ Jmeter 리소스 제한 수정하기
Jmeter가 '서버에 부하'를 줄 수 있지만 '클라이언트(내 PC)에 부하'를 줄 수도 있습니다 (????)
Jmeter 프로그램이 사용하는 Memory가 꽤나 크기에 기본적으로 제한이 걸려있습니다.
이를 수정하기 위해선 Jmeter 실행파일을 조금 수정해볼 수 있습니다.
(C:\성능점검\jmeter-custom 파일 우클릭 - 메모장에서 편집)

JVM ARGS 옵션 추가
set "JVM_ARGS=%JVM_ARGS% -Xms4g -Xmx8g -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
