JMeter

YoungJun Kim·2022년 10월 19일
0

Application Test

목록 보기
4/6

JMeter란?

Jmeter는 순수 Java로 만들어진 아파치의 오픈 소스 소프트웨어로, 기능의 동작을 로드하고 성능을 측정할 수 있는 테스트 도구이다.


JMeter의 특징

1. Jmeter는 다양한 애플리케이션/서버/프로토콜 유형을 로드하고 테스트 할 수 있다.

  • Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …)
  • SOAP / REST Webservices
  • FTP
  • Database via JDBC
  • LDAP
  • Message-oriented middleware (MOM) via JMS
  • Mail - SMTP(S), POP3(S) and IMAP(S)
  • Native commands or shell scripts
  • TCP
  • Java Objects

2. 브라우저 또는 응용 프로그램에서 빠르게 테스트 플랜을 기록하고, 구축하고, 디버깅을 가능하게 하는 IDE를 제공한다.

3. Java를 사용 가능한 모든 OS에서 CLI 모드로 테스트를 수행할 수 있다.

4. 사용하기 쉬워 소프트웨어의 휴대성이 좋고 100% Java로 이루어져 있다.

5. 다른 스레드를 지원하여 동시 샘플링이 가능하고 별도의 스레드 그룹을 통해 다른 함수의 동시 샘플링도 가능하다.

6. 테스트 결과를 캐싱하고 오프라인으로 분석하고 확인할 수 있다.

7. 플러그형 샘플러는 무제한의 테스트 기능을 허용하기 때문에 확장성이 뛰어나다.

8. Maven, Gradle, Jenkins 용 타사 오픈 소스 라이브러리를 통해 CI를 구성하기 쉽다.


JMeter 설치 및 실행

공식 사이트에서 Jmeter의 Binary 파일을 다운 받을 수 있다. Jmeter를 사용하기 위해서는 Java8 버전 이상이 설치되어 있어야 한다.

파일을 다운 받아 압축을 해제하고 bin 폴더에서 .\jmeter커맨드를 실행하면 손 쉽게 시작이 가능하다.


위와 같은 화면이 뜬다면 성공적으로 실행이 된 것이다.


JMeter 용어

Jmeter를 사용하기 위해 간단하게 테스트에 사용하는 용어를 알아보자.

  • Thread Group : 테스트에 사용될 쓰레드 개수 (쓰레드 1개당 사용자 1명)
  • Sampler : 사용자의 액션 (예: 로그인, 게시물 작성, 게시물 조회 등)
  • Listener : 응답을 받아 리포팅, 검증, 그래프 등 다양한 처리
  • Configuration : Sampler 또는 Listener가 사용할 설정 값 (쿠키, JDBC 커넥션 등)
  • Assertion : 응답 검증 (응답 코드, 본문 내용 비교 등)

Jmeter 기본 사용법

1. Thread Group 생성하기


Thread 별로 하나의 요청을 보내게 되는데 결국 테스트 가상 유저, 테스트 시나리오를 세팅하는 부분인 셈이다.

  • Action to be taken after Sampler error: Sampler에서 오류를 응답받았을 때 테스트의 진행 방식을 설정
  • Number of Thread(users): 요청을 보내는 쓰레드의 수를 지정, 결국 VUser의 수가 됨
  • Ramp-up period(second): 쓰레드 개수를 만드는데 소요되는 시간, 즉 모든 스레드의 실행을 시작하는 데 걸리는 시간 (총 테스트 시간)
  • Loop Count: 유저가 테스트를 반복할 횟수

위와 같이 설정을 했다면, 총 10명의 유저가 테스트에 참가를 할 것인데 20초 동안 10명의 유저를 생성할 것이다. 그리고 한 유저 당 10번의 반복을 수행하게 된다.

그러면 총 1명의 유저가 2초동안 10번의 요청을 보내게 되고, 다음 유저가 또 2초 동안 10번의 요청을 보내는 방식으로 테스트가 이뤄지는 것이다.

만약 Number of Thread 값을 100, Ramp-up period를 50, Loop Count를 100으로 지정했다면, 50초 동안 100개의 쓰레드를 생성해야 하니 1초에 2개의 쓰레드가 생성될 것이고, 이 2개의 쓰레드는 각각 100번의 요청을 보내게 될 것이다.

2. Sampler 정의하기


사용자의 액션을 지정하는 Sampler를 정의하자. HTTP Request를 보내서 테스트를 할 것이기 때문에 이를 선택한다.


요청을 보낼 서버의 IP, Port를 명시하고 어떤 메서드와 URI로 HTTP Request를 보낼 지 설정한다. 역시 쿼리 스트링이나 메시지 바디, 파일 등을 설정할 수가 있다.

3. Listener 추가하기


실제 테스트 진행 시 응답 결과를 Listener를 통해 확인할 수 있다.

간단하게 View Result Tree, Summary Report, Aggregate Report, View Result in Table 리스너를 추가해서 테스트를 해보자. VUser 30, Ramp-up 30초, 10번 반복으로 테스트를 진행해 보았다.

View Result Tree


각 요청마다 결과를 보여준다.

Summary Report


요청 결과를 요약해서 보여준다.

Average는 평균적으로 응답에 3ms가 소요됨을 나타낸다.

Throughput은 초당 몇 개의 요청을 처리했는지를 보여준다.

이외 나머지는 충분히 추론 가능하기에 어떤 값인지 따로 설명은 하지 않겠다.

Aggregate Report


요청 결과를 집계해서 보여준다.

Median은 소요 시간의 중앙값을 의미한다.

90% Line은 총 요청의 90%가 5ms 안에 처리되었음을 의미한다. 즉, 300개의 요청을 보냈을 때 270개의 요청은 5ms 안에 모두 응답이 왔다는 소리이다. 평균적으로 95%, 99%의 수치를 참조한다고 한다.

이외 나머지는 충분히 추론 가능하기에 어떤 값인지 따로 설명은 하지 않겠다.

View Result in Table


Table 형식으로 각각의 결과를 표시해준다.

4. Assertion 추가하기

응답 데이터를 검증하기 위해 Assertion을 추가할 수 있다.


Test Response, Response Code, Response Message, Response Headers 등등.. 여러 값들을 조건을 넣어 검증할 수 있다. 한번 응답 텍스트를 검증해보자.

Assertion Results 리스너를 추가해서 확인할 수 있고, 기존의 리스너에도 테스트 실패를 표시해준다.

Assertion Result에는 Assertion에 실패한 원인을 분석할 수 있다.


View Resilts Tree를 보면 테스트에 통과하지 못했음을 알 수 있다. 다른 리스너에도 Error의 %가 올라간다던지 등으로 표시된다.

profile
반갑습니다. 주니어 백엔드 개발자 김영준입니다.

0개의 댓글