Apache JMeter는 순수 자바로 작성된 오픈 소스 성능/인터페이스/스트레스 테스트 도구로, 웹, 데이터베이스, TCP 등 다양한 프로토콜을 지원합니다. 이 문서에서는 설치부터 핵심 컴포넌트, 인터페이스 테스트, 성능 테스트, 고급 기능 및 보고서 생성까지의 전 과정을 다룹니다.
- 환경 설정 및 시작
1.1 Java 설치
JMeter는 Java 환경에 의존하므로 JDK 8 이상을 설치해야 합니다 (권장: JDK 11/17).
- 다운로드: Oracle JDK 또는 OpenJDK
- 환경 변수 설정:
JAVA_HOME,Path(%JAVA_HOME%\bin추가) - 확인: 명령 프롬프트에서
java -version입력 후 버전 표시
1.2 JMeter 설치
- 공식 사이트에서 다운로드: Apache JMeter → Download →
apache-jmeter-x.x.x.zip(Windows) /.tgz(Linux) - 압축 해제: 한글이나 공백 없는 경로 (예:
D:\apache-jmeter-5.6.3) - 선택적 환경 변수 설정:
JMETER_HOME: 압축 해제 경로Path:%JMETER_HOME%\bin추가
1.3 JMeter 실행
- Windows:
bin폴더에서jmeter.bat더블 클릭 (GUI 모드) - Linux/Mac: 터미널에서
sh jmeter - 명령 줄 모드 (필수):
jmeter -n(-n=비 GUI)
주의: GUI는 스크립트 디버깅용이며, 실제 테스트 시 명령 줄 모드를 사용해야 합니다, 그렇지 않으면 리소스 소모가 크고 결과가 왜곡될 수 있습니다.
- JMeter 핵심 컴포넌트
JMeter 스크립트는 트리 구조이며 모든 컴포넌트는 계층적으로 추가됩니다.
2.1 테스트 플랜 (Test Plan)
- 루트 노드, 모든 컴포넌트의 컨테이너, "프로젝트 폴더" 역할
- 설정: 이름, 주석, 독립 실행 스레드 그룹, 함수 모드
2.2 스레드 그룹 (Thread Group)
가상 사용자 시뮬레이션, 동시성, 실행 횟수 제어. 테스트 플랜 오른쪽 클릭 → 추가 → 스레드(사용자) → 스레드 그룹
주요 파라미터:
- 스레드 수: 가상 사용자 수 (예: 100=100명 동시 접속)
- Ramp-Up 시간(초): 모든 스레드 시작 시간 (예: 10초 동안 100개 스레드=초당 10개)
- 반복 횟수: 각 사용자의 실행 횟수 ("영구" 체크=계속 테스트)
- 스케줄러: 테스트 지속 시간, 시작/종료 시간 설정
2.3 샘플러 (Sampler)
서버 요청 보내기, HTTP, JDBC, FTP, TCP 등을 지원. 가장 일반적인 경우: HTTP 요청 (웹/인터페이스 테스트)
2.4 구성 요소 (Config Element)
전역/로컬 변수, 요청 헤더, 쿠키, 매개변수화 설정. 일반적인 예:
- HTTP 헤더 관리자:
Content-Type,Authorization등의 헤더 설정 - HTTP 쿠키 관리자: 세션 쿠키 자동 관리 (로그인 상태 유지)
- 사용자 정의 변수: 전역 변수 (예: 서버 IP, 포트)
- CSV 데이터 파일 설정: 매개변수화 (다중 테스트 데이터)
2.5 단언 (Assertion)
응답 검증, 요청 성공 여부 판단. 일반적인 예:
- 응답 단언: 응답 텍스트, 상태 코드, 헤더 검증
- JSON 단언: JSON 응답 필드 검증 (예:
$.code=200) - 지속 시간 단언: 응답 시간 검증 (예: ≤500ms)
2.6 리스너 (Listener)
테스트 결과 수집 및 표시, 디버깅 및 분석 필수. 일반적인 예:
- 결과 트리 보기: 요청/응답 상세 정보 (디버깅용)
- 요약 보고서: 처리량, 응답 시간, 오류율 (핵심 지표)
- 집계 보고서: 더 상세한 성능 통계 (성능 테스트 필수)
- 응답 시간 그래프: 응답 시간 추세
2.7 타이머 (Timer)
사용자 생각 시간 시뮬레이션 및 요청 속도 제어. 일반적인 예:
- 고정 타이머: 일관된 지연 (예: 1000ms)
- 가우시안 무작위 타이머: 더 사실적인 무작위 지연
- 상수 처리량 타이머: 정확한 TPS 제어 (예: 600/분=10TPS)
- 동기화 타이머: 집합점 (다중 스레드 동시에 요청하여 동시 최대치 테스트)
2.8 전처리기/후처리기
- 전처리기: 요청 전 실행 (예: 매개변수 사전 처리)
- 후처리기: 요청 후 실행 (추출기, 인터페이스 연관 필수)
- JSON 추출기: JSON 응답에서 데이터 추출 (예: Token)
- 정규 표현식 추출기: 텍스트에서 데이터 추출
- 기본 실습: HTTP 인터페이스 테스트 (GET/POST)
단계 1: 테스트 플랜 생성
JMeter 열기, 자동으로 생성된 "테스트 플랜"을 API 테스트-로그인으로 이름 변경
단계 2: 스레드 그룹 추가
테스트 플랜 오른쪽 클릭 → 추가 → 스레드 → 스레드 그룹
- 스레드 수: 1
- Ramp-Up: 1
- 반복 횟수: 1
단계 3: HTTP 헤더 관리자 추가
스레드 그룹 오른쪽 클릭 → 추가 → 구성 요소 → HTTP 헤더 관리자 추가:
Content-Type: application/json;charset=UTF-8
단계 4: HTTP 요청 추가 (POST 로그인 인터페이스)
스레드 그룹 오른쪽 클릭 → 추가 → 샘플러 → HTTP 요청 설정:
- 서버 이름/IP:
api.xxx.com(또는 IP) - 포트 번호:
80/443 - 프로토콜:
http/https - 메서드:
POST - 경로:
/api/user/login - 본문 데이터:
{
"username": "test",
"password": "123456"
}
단계 5: JSON 단언 추가 (로그인 성공 검증)
HTTP 요청 오른쪽 클릭 → 추가 → 단언 → JSON 단언 설정:
- JSON 경로 표현식:
$.code - 예상 값:
200 - "상태 무시" 체크 (HTTP 500 에러 직접 실패 방지)
단계 6: 리스너 추가
스레드 그룹 오른쪽 클릭 → 추가 → 리스너:
- 결과 트리 보기 (디버깅)
- 요약 보고서 (지표 확인)
단계 7: 테스트 실행
도구 모음의 녹색 삼각형(실행) 클릭
- 결과 트리 보기: 녹색=성공, 빨강=실패
- 요약 보고서: 응답 시간, 처리량, 오류율 확인
- 고급 실습: 성능 테스트 (병렬/부하)
4.1 스레드 그룹 설정 (테스트 핵심)
- 스레드 수:
200(200명 사용자 시뮬레이션) - Ramp-Up:
10초 (10초 내 200명 사용자 시작) - 반복 횟수:
영구 - 스케줄러 → 지속 시간:
600초 (10분 테스트)
4.2 타이머 추가 (생각 시간 시뮬레이션)
스레드 그룹 오른쪽 클릭 → 추가 → 타이머 → 가우시안 무작위 타이머
- 편차:
500ms - 고정 지연 오프셋:
1000ms
4.3 인터페이스 연관 (토큰 전달)
시나리오: 로그인→토큰 얻기→다른 인터페이스에서 토큰 포함 요청
- 로그인 요청 하위에 JSON 추출기 추가:
- 참조 이름:
token - JSON 경로:
$.data.token - 매치 번호:
1
- 후속 인터페이스: 헤더 관리자에 추가:
Authorization: Bearer ${token}
4.4 매개변수화 (CSV 다중 데이터)
user.csv생성:
username,password
test1,123456
test2,654321
test3,111222
- 스레드 그룹 하위에 CSV 데이터 파일 설정 추가:
- 파일 이름:
user.csv경로 - 변수 이름:
username,password - 구분자:
, - 순환 옵션:
EOF 재활용=True
-
HTTP 요청에서 사용:
${username},${password} -
명령 줄 테스트 (실제 환경 필수)
핵심 명령
jmeter -n -t 테스트_스크립트.jmx -l 결과.jtl -e -o 보고서_폴더
파라미터:
-n: 비 GUI 모드-t: 스크립트 지정 (.jmx)-l: 결과 저장 (.jtl)-e -o: HTML 보고서 생성
예시 (Windows)
jmeter -n -t 로그인_테스트.jmx -l result.jtl -e -o report
실행 후, report/index.html로 보고서 확인.
- HTML 보고서 핵심 지표 해석
- Samples: 전체 요청 수
- KO: 실패 요청 수
- Error %: 오류율 (테스트 요구사항: ≤0.1%)
- Average: 평균 응답 시간 (ms)
- 90%/95%/99% Line: 90%/95%/99% 요청의 응답 시간 상한선 (핵심 지표)
- Throughput: 처리량 (TPS/초당 요청 수, 높을수록 좋음)
- Received/Sent: 네트워크 트래픽