일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- PascalCase
- NamingRule
- UDP통신
- SnakeCase
- udp
- ServerSocket
- 명명규칙
- DatagramSocket
- tcp
- Socket
- KebabCase
- 파스칼케이스
- 케밥케이스
- 스네이크케이스
- 카멜케이스
- Java
- camelcase
- DatagramPacket
- Today
- Total
MATT's
[Java][테스트툴]JMeter 본문
JMeter란?
- Apache JMeter는 웹 애플리케이션처럼 클라이언트-서버 구조로 된 소프트웨어의 성능 테스트를 위해서 만들어진 100% 순수 자바 프로그램이다.
- 한 마디로 '서버에 대한 성능을 가시적으로 볼 수 있는 도구'
성능 테스트란?
- '성능 테스트'란 서비스 및 서비스 시스템의 성능을 확인하기 위해서 실제 사용환경과 비슷한 환경에서 테스트를 진행하는 것을 말다. 이를 통해서 응답시간(Response Time)과 처리량(Throughput), 병목구간 등을 확인할 수 있고, 성능 테스트로 얻은 정보로 서비스나 서비스 시스템의 문제점을 확인하고 이를 개선(Tuning)하여 보완할 수 있다.
JMeter 설치 방법
JMeter 설치 방법은 Mac / Windows / Linux 각 OS 별로 방법이 다 다르나, 본 게시글에서는 일단 Windows 설치 방법만을 설명한다.
Windows에서의 JMeter 설치 방법은 JMeter 공식 홈페이지에서 zip파일을 다운 받아 압축을 해제하면 된다.
(https://jmeter.apache.org/download_jmeter.cgi)

JMeter 실행 방법
다운 받은 zip파일을 압축 해제하고 bin 디렉토리의 'jmeter.bat' 파일을 실행시키면 JMeter가 실행된다.

JMeter를 실행한 후에는 먼저 JMeter 테스트를 위해서 Thread Group이라는 것을 만들어야한다.
JMeter Test는 크게 아래와 같은 구조를 가진다.
- Test Plan : 가장 큰 단위로, Thread Group 들로 이루어져 있다.
- Thread Group : 하나의 테스트 캐이스이다. 이는 아래의 여러 Sampler들의 합으로 이루어져있다.
- Sampler : 하나의 작은 작업 단위이다.
- Thread Group : 하나의 테스트 캐이스이다. 이는 아래의 여러 Sampler들의 합으로 이루어져있다.

Thread Group
먼저 Thread Group을 생성해보자


Thread Group는 아래와 같은 항목들을 가진다. 하고자 하는 테스트에 맞게 설정해서 생성하면 된다.
Name | 테스트 이름 |
Comments | 첨부할 설명 |
Action to be taken after a Sampler error | 샘플러가 에러시에 취할 행동이다. 사실 보통 Continue를 두면 에러와 무관하게 루프를 돌게된다. 만약 다른 행동을 취하고 싶다면 해도된다. |
Number of Threads | 쓰레드를 동시에 몇개 생성할지이다. 즉 동시에 몇개의 트랜잭션을 실행시킬지이다. 이는 사람이 동시에 접속하는 효과를 낸다. 10명이서 동시에 접속하는 상황을 만들고 싶다면 10을 사용하면된다. |
Ramp-Up Period | 쓰레드를 Ramp-Up Period시간동안 실행해라는 의미이다. 단 균등하게 시간을 나눠서 실행하려고 노력한다. 예를 들어 Nomber of Threads가 10인데 Ramp-Up Period가 60이면 10개의 쓰레드가 6초간격으로 동작하려고 한다. 근데 그렇게 안될 수도 있다. |
Loop Count | 스레드의 반복 횟수를 의미한다. 10이면 10번 반복한다. Forever에 체크하면 무한 반복한다. |
Delay Thread creation until needed | 스레드의 생성을 필요할 때까지 기다린다. 체크를 해제하면 안기다리고 날리는데 반응성은 더 좋아지긴 하는데 안정성을 위해서 체크해 두자. |
Scheduler | 위의 모든 작업을 스케줄화 해서 할 수 있다. |
Duration | Scheduler를 체크했을때만 사용가능. Thread Properties의 총작업을 하는 시간을 의미한다. 예를들어 100초를 정하면 위의 작업을 딱 100초동안 실행한다. 100초안에 걸리는 작업이면 조기에 정지되지만 위의 작업이 100초를 넘어간다면 더이상 실행하지 않고 멈춘다. |
Startup delay | 위의 작업을 실행하기 위한 유예기간을 의미한다. 쓰레드 그룹이 한개일때는 별 필요없지만 쓰레드 그룹을 여러개 돌릴떄는 서로 차등을 줄 수 있다. |
Sampler
Thread Group 생성이 완료되었으면, 그 아래에 Sampler를 추가해보자.
본 게시글에서는 HTTP Request Sampler를 사용한다.


Listener
Sampler까지 생성이 완료되었으면, 이제 해당 테스트의 결과를 조회할 수 있는 Listener 들을 생성한다.

Listener의 종류는 많지만, 그 중 가장 많이 사용되는 Listener 들에 대해 알아보자
1) View Results in Table
모든 결과를 테이블 형태로 출력해주는 Listener

결과는 위 화면과 같이 출력되며 출력되는 데이터는 아래와 같은 의미를 가지고 있다.
[Table 열]
Sample | ID번호. 이 번호를 보고 몇번째로 보는 부하인지 알 수 있다. |
Start Time | 보내기 시작한 시간으로 ms단위까지 나온다. |
Thread Name | 쓰레드 그룹 이름 |
Label | 보낸 request의 이름 |
Sample Time(ms) | Load Time, Elapsed Time, Response Time이랑 같은 뜻이다. 요청 시작 시점부터 응답 종료 시점까지의 시간을 의미 |
Status | 말그대로 응답상태를 확인할 수 있다. |
Bytes | 응답 데이터 바이트 |
Sent Byte | 요청 데이터 바이트 |
Latency | 지연 속도를 의미하는데 요청 시작 시점부터 응답 시작 시점까지의 시간을 의미 |
Connect Time(ms) | TCP Handshake를 이용해 연결하는 시간(그냥 TCP연결시간) |
[Table footer]
No of Samples | 여기서 No는 number를 의미한다. 처리중인 데이터 수를 의미 |
Latest Sample | 가장 마지막 Sample Time |
Average | Sample Time 평균 |
Deviation | Sample Time의 표준편차 |
2) View Results Tree
주로 상세 결과 조회 및 결과에 대한 검색이 필요할 경우 사용되는 Listener

각 Request들의 결과를 조회할 수 있고, 검색 또한 가능하다.
Request / Response data 탭을 클릭해서 요청/응답 값에 대한 정보도 조회가 가능하다.
3) Summary Report
결과 요약 정보를 Report 형태로 조회할 수 있는 Listener

각 항목들의 의미는 아래와 같다.
Label | 사용했던 request의 이름을 기준으로 모은다. 따라서 다르게 집계하고싶다면 이름을 반드시 다르게 한다. |
Samples | requset 갯수 |
Average | Sample Time의 평균값 |
Min | Sample Time의 최소값 |
Max | Sample Time의 최대값 |
Std. Dev. | Sample Time의 표준편차 |
Error % | 에러율 |
Throughput | 시간당 처리량(=쓰루풋) |
Received KB/sec | 시간당(sec) 받은 데이터(KB) |
Sent KB/sec | 시간당(sec) 보낸 데이터(KB) |
Avg. Bytes | 평균 바이트 |
'Java' 카테고리의 다른 글
POI 엑셀 생성 및 다운로드 (feat. RowHandler, ResultHandler) (0) | 2020.06.22 |
---|---|
[JAVA] TCP 통신 (ServerSocket, Socket) (0) | 2020.02.25 |