MATT's

[Java][테스트툴]JMeter 본문

Java

[Java][테스트툴]JMeter

matt5659 2022. 5. 17. 23:49

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

먼저 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  평균 바이트