JMeter 사용 가이드 및 상세 설명

Apache JMeter는 순수 자바로 작성된 오픈 소스 성능/인터페이스/스트레스 테스트 도구로, 웹, 데이터베이스, TCP 등 다양한 프로토콜을 지원합니다. 이 문서에서는 설치부터 핵심 컴포넌트, 인터페이스 테스트, 성능 테스트, 고급 기능 및 보고서 생성까지의 전 과정을 다룹니다.

  1. 환경 설정 및 시작

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는 스크립트 디버깅용이며, 실제 테스트 시 명령 줄 모드를 사용해야 합니다, 그렇지 않으면 리소스 소모가 크고 결과가 왜곡될 수 있습니다.

  1. 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)
  • 정규 표현식 추출기: 텍스트에서 데이터 추출
  1. 기본 실습: 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: 리스너 추가

스레드 그룹 오른쪽 클릭 → 추가 → 리스너:

  1. 결과 트리 보기 (디버깅)
  2. 요약 보고서 (지표 확인)

단계 7: 테스트 실행

도구 모음의 녹색 삼각형(실행) 클릭

  • 결과 트리 보기: 녹색=성공, 빨강=실패
  • 요약 보고서: 응답 시간, 처리량, 오류율 확인
  1. 고급 실습: 성능 테스트 (병렬/부하)

4.1 스레드 그룹 설정 (테스트 핵심)

  • 스레드 수: 200 (200명 사용자 시뮬레이션)
  • Ramp-Up: 10초 (10초 내 200명 사용자 시작)
  • 반복 횟수: 영구
  • 스케줄러 → 지속 시간: 600초 (10분 테스트)

4.2 타이머 추가 (생각 시간 시뮬레이션)

스레드 그룹 오른쪽 클릭 → 추가 → 타이머 → 가우시안 무작위 타이머

  • 편차: 500ms
  • 고정 지연 오프셋: 1000ms

4.3 인터페이스 연관 (토큰 전달)

시나리오: 로그인→토큰 얻기→다른 인터페이스에서 토큰 포함 요청

  1. 로그인 요청 하위에 JSON 추출기 추가:
  • 참조 이름: token
  • JSON 경로: $.data.token
  • 매치 번호: 1
  1. 후속 인터페이스: 헤더 관리자에 추가:
  • Authorization: Bearer ${token}

4.4 매개변수화 (CSV 다중 데이터)

  1. user.csv 생성:
username,password
test1,123456
test2,654321
test3,111222
  1. 스레드 그룹 하위에 CSV 데이터 파일 설정 추가:
  • 파일 이름: user.csv 경로
  • 변수 이름: username,password
  • 구분자: ,
  • 순환 옵션: EOF 재활용=True
  1. HTTP 요청에서 사용: ${username}, ${password}

  2. 명령 줄 테스트 (실제 환경 필수)

핵심 명령

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로 보고서 확인.

  1. HTML 보고서 핵심 지표 해석
  • Samples: 전체 요청 수
  • KO: 실패 요청 수
  • Error %: 오류율 (테스트 요구사항: ≤0.1%)
  • Average: 평균 응답 시간 (ms)
  • 90%/95%/99% Line: 90%/95%/99% 요청의 응답 시간 상한선 (핵심 지표)
  • Throughput: 처리량 (TPS/초당 요청 수, 높을수록 좋음)
  • Received/Sent: 네트워크 트래픽

태그: JMeter 성능테스트 HTTP CSV JSON

6월 7일 17:39에 게시됨