JMeter란?
- 서버가 제공하는 성능 및 부하를 측정할 수 있는 테스트 도구
- 순수 Java 애플리케이션 오픈소스 이며, 서버나 네트워크 또는 개체에 대해 과부하를 시뮬레이션하여 강도를 테스트하거나 다양한 부하 유형에서 전체 성능을 분석하는 데 사용
- 비슷한 성능 테스트 도구
- Apache Benchmark
- Ngrinder
- Pinpoint
- Gatling
주요 기능
- 성능 테스트 (Performance Testing):
- JMeter는 시스템의 성능을 측정하는 데 사용
- 예를 들어, 웹 애플리케이션이 다수의 동시 접속자 수를 얼마나 처리할 수 있는지, 응답 시간이 얼마나 되는지 등을 확인 가능
- 성능 테스트는 시스템이 특정 조건에서 얼마나 잘 작동하는지, 병목 현상은 없는지를 파악하는 데 도움을 줌
- 로드 테스트 (Load Testing):
- JMeter를 사용하면 시스템에 점진적으로 부하를 가해, 성능이 어떻게 변화하는지 평가 가능
- 예를 들어, 100명, 1000명, 10,000명의 사용자가 동시에 접속할 때 시스템이 어떻게 반응하는지 시뮬레이션 가능
- 이를 통해 시스템의 한계점과 안정성을 미리 파악 가능
- 스트레스 테스트 (Stress Testing):
- 시스템에 최대 부하 또는 그 이상의 부하를 가해 시스템이 언제, 어떻게 실패하는지 테스트 가능
- 이를 통해 시스템의 안정성과 회복 능력을 평가할 수 있습니다.
- 기능 테스트 (Functional Testing):
- JMeter는 웹 애플리케이션의 기능을 테스트하는 데에도 사용 가능
- 예를 들어, 특정 API가 예상대로 작동하는지, 웹 페이지가 올바른 데이터를 반환하는지 등을 확인 가능
- 분산 테스트 (Distributed Testing):
- JMeter는 여러 대의 컴퓨터를 사용하여 대규모 부하 테스트를 수행 가능
- 이는 분산 모드에서 실행되며, 수천 명의 동시 사용자 시뮬레이션이 가능
- 보고서 및 분석:
- JMeter는 테스트 결과를 시각적으로 분석할 수 있는 다양한 보고서와 그래프를 제공
- 이를 통해 성능 문제를 쉽게 파악 가능
주요 개념
- Thread Group
- 몇 개의 쓰레드가 동시에 요청을 보내는지
- Sampler
- 어떤 유저가 해야 하는 액션
- Listener
- 응답을 받았을 때 어떤 동작을 취하는 지 (검증, 리포트, 그래프 그리기 등)
- Configuration
- Sampler 또는 Listener가 사용할 설정 값 (쿠키, JDBC 커넥션 등)
- Assertion
- 응답 결과의 성공 여부를 판단하는 조건 (응답 코드, 본문 내용 등)
설치 및 실행
https://jmeter.apache.org/download_jmeter.cgi
- 앞서 설명한 것 처럼 순수 자바 애플리케이션 오픈 소스이기 때문에 자바 8 버전이상 설치가 되어있어야 함
- 위 링크의 Binaries에서 zip 파일을 다운 후 압축 해제
- bin 폴더 안에 있는 jmeter.bat 파일 실행
Test Plan 이름 설정
Thread Group
- 좌측 테스트 플랜 → 마우스 우 클릭 → Add → Thread(Users) → Thread Group
- 1000명의 사람(Number of Threads)이 5회(Loop Count) 시도
- Action to be taken after a Sample error
- 에러가 처리 됐을 때 취할 액션
- 이는 Assertion의 결과로 판단
- Number of Threads
- 몇 개의 쓰레드(유저 수)로 테스트할 지
- Ramp-up period
- {Number of Thread} 만큼의 쓰레드를 만들 때 소요할 시간
- Loop Count
- 요청을 몇번을 반복할 지
Sampler
- 각각의 유저가 해야할 일을 Sampler에 정의
- Thread Group → 마우스 우 클릭 → Add → Sampler → HTTP Request
- Name
- 좌측의 이름 설정
- Server Name or IP
- 서버의 도메인 이름이나 IP 주소
- Port Number
- 포트 번호
- HTTP Request
- HTTP Method 방식
- Path
- API의 경로(Path) 설정
Listener
- 결과를 받고 행동을 취하는 것
- 다음과 같이 3개의 리스너 추가
실행
Summary Report
- Label
- 테스트한 샘플의 이름 또는 경로를 나타냄
- #Sample
- 수행된 샘플(요청)의 총 횟수
- 1000명의 유저(스레드)로 5회(Loop Count)반복 했기 때문에 5,000번
- Average
- 요청의 평균 응답 시간(ms)
- Min
- 요청에 대한 최소 응답 시간(ms)
- Max
- 요청에 대한 최대 응답 시간(ms)
- Std Dev(Standard Deviation)
- 응답 시간의 표준 편차
- 데이터가 평균으로부터 얼마나 분산되어 있는지를 나타내며, 값이 클수록 응답 시간의 일관성이 떨어짐을 의미
- Error %
- 요청 중 오류가 발생한 비율
- Throughput
- 초당 처리량을 나타내며, 초당 처리된 요청 수를 의미
- 459.3/sec는 초당 459.3개의 요청이 처리됨을 의미
- Received KB/sec
- 초당 수신된 데이터 양을 킬로바이트(KB) 단위로 표시
- Sent KB/sec
- 초당 전송된 데이터 양을 킬로바이트(KB) 단위로 표시
- Avg. Bytes
- 요청당 평균으로 전송된 바이트 수
View Results in Table
- Sample#
- 각 샘플의 순서 번호
- 테스트 실행 순서에 따라 샘플 번호가 부여
- Start Time
- 각 샘플이 시작된 시간
- 테스트가 실행된 정확한 시점을 밀리초 단위로 기록
- Thread Name
- 요청을 보낸 스레드의 이름을 표시
- 예를 들어, "Thread Group 1-1"은 "Thread Group 1"에서 첫 번째로 실행된 스레드를 의미
- Label
- 요청의 라벨을 표시
- 요청이 어떤 작업을 수행했는지 식별할 수 있는 이름
- Sample Time(ms)
- 요청의 응답 시간을 밀리초(ms) 단위로 표시
- 요청이 시작되어 응답을 받기까지 걸린 전체 시간을 나타냄
- Status
- 요청의 성공 또는 실패 여부를 나타냄
- Bytes
- 응답으로 수신된 총 바이트 수를 표시
- Sent Bytes
- 요청을 보낼 때 전송된 바이트 수를 표시
- Latency
- 요청이 서버에 도달하여 최초로 응답을 받기까지 걸린 시간을 밀리초(ms) 단위로 표시
- 이 시간은 서버가 요청을 처리하기 시작하는 시점을 기준으로 하며, 네트워크 대기 시간 등이 포함
- Connect Time(ms)
- 서버에 연결되는 데 걸린 시간을 밀리초(ms) 단위로 표시
- 즉, 클라이언트와 서버 간의 TCP 연결이 이루어지는 데 걸린 시간
Aggregate Report
- Label
- 테스트된 샘플(요청)의 이름을 표시
- 각 요청의 유형이나 경로를 식별 가능
- # Samples
- 해당 요청에 대해 수행된 샘플(요청)의 총 횟수
- Average
- 요청의 평균 응답 시간을 밀리초(ms) 단위로 표시
- 모든 요청에 대해 응답 시간의 평균값을 계산하여 나타냄
- Median
- 중앙값 응답 시간을 밀리초(ms) 단위로 표시
- 전체 요청 중 절반이 이 시간보다 빠르게 응답되었고, 나머지 절반이 이 시간보다 느리게 응답되었음을 의미
- Ex) Median 23은 모든 요청 응답 시간 중 절반이 23ms 이하, 나머지 절반이 23ms 이상
- 90% Line
- 상위 90%의 요청이 이 시간보다 빠르게 응답되었음을 나타냄
- 나머지 10%는 이보다 더 오래 걸림
- 성능 테스트에서 일반적으로 응답 시간의 최악의 경우를 평가하는 지표로 사용
- 95% Line
- 상위 95%의 요청이 이 시간보다 빠르게 응답되었음을 나타냄
- 나머지 5%의 요청이 이보다 더 오래 걸림
- 최악의 시나리오를 조금 더 구체적으로 평가할 수 있는 지표
- 99% Line
- 상위 99%의 요청이 이 시간보다 빠르게 응답되었음을 나타냄
- 최악의 1%의 요청에 대한 응답 시간을 분석할 수 있는 지표로, 성능 테스트의 가장 엄격한 평가 기준 중 하나
- Min
- 요청에 대한 최소 응답 시간을 밀리초(ms) 단위로 표시
- Max
- 요청에 대한 최대 응답 시간을 밀리초(ms) 단위로 표시
- Error %
- 요청 중 오류가 발생한 비율을 백분율(%)로 표시
- 이 값이 낮을수록 시스템이 안정적으로 동작했음을 의미
- Throughput
- 초당 처리된 요청 수를
- 시스템의 처리 성능을 나타내며, 초당 몇 개의 요청이 처리되었는지 보여줌
- Received KB/sec
- 초당 수신된 데이터 양을 킬로바이트(KB) 단위로 표시
- 서버가 클라이언트로부터 수신한 데이터의 양을 나타냄
'Tools' 카테고리의 다른 글
[JMeter] JMeter를 이용한 대용량 트래픽 측정 (0) | 2024.09.18 |
---|---|
[JMeter] JWT 토큰 추출 및 헤더 추가 (2) | 2024.09.04 |