티스토리 뷰

오픈소스

JMeter로 웹 스트레스 테스트

토마's 2019. 11. 29. 11:08

시작하며

웹 서비스 및 솔루션 개발을 진행하다가 부하 성능 테스트를 위해 다양한 오픈소스를 찾아보게 되었는데, 그 종류로는 nGrinder, PINPOINT, JMeter 등이 있었고, 그 중에서 JMeter라는 Apache Jakarta 프로젝트를 사용해 테스트할 사이트 URL, 요청에 필요한 파라미터, 테스트할 사용자 수 및 반복 횟수 등을 설정해 웹 사이트 서버의 성능을 테스트한 내용을 공유드리려고 합니다.

 

보다 자세한 내용은 Apache Document의 내용을 읽어보시면 됩니다. (https://jmeter.apache.org/)

설치 및 실행

본 내용은 MAC OS에서 설치를 진행했으며, brew를 사용해 간단하게 설치를 진행합니다.

brew install jmeter

 

수 많은 로그가 지나가면서 설치가 완료가 되고 나면, 다음 명령어 "jmeter" 를 사용해서 JMeter를 실행합니다. 아래와 같은 로그가 뜨면서 JMeter 클라이언트가 실행되는 것을 확인 해볼 수 있습니다.

jmeter
 
================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):
   jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
   Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================

 

Windows 운영체제는 아래와 같이 설치를 진행합니다.

다운로드 링크 : http://jmeter.apache.org/download_jmeter.cgi

다운로드 받은 후 압축을 풀어주고, /bin 디렉토리 하위에 있는 jmeter.bat 파일을 실행해주면 됩니다.

 

초기 실행화면

 

테스트

테스트를 진행하기에 앞서, 테스트 진행을 위한 설정을 진행합니다. 우선 Test Plan에서 우클릭을 통해 Add > Threads (Users) > Thread Group을 생성해 줍니다. 그리고 아래의 그림과 같이 설정을 해주어야 될 사항이 있는데 성능 테스트에서 가장 중요한 부분입니다.

  • Action to be taken after a Sampler error : 실행 중 Error가 발생했을 경우 처리할 방법에 대해서 선택해 하면 됩니다.
  • Number of Threads (users) : 쓰레드의 개수를 기입하는 곳으로 즉, 몇 명의 유저로 테스트를 진행할 것인지 결정해서 기입하면 됩니다.
  • Ramp-Up Period (in seconds) : 쓰레드가 전체가 실행되는데 까지의 걸리는 시간을 나타냅니다. 
    → 예를 들면, Number of Thread가 10개이고, Ramp-Up Period가 10초 일 경우에는 첫 번째 thread가 수행된 후 다음 thread가 수행될 때까지 1초를 대기한다고 생각하면 됩니다. 즉, Thread 10개가 10초 동안 실행이 되려면 1초 마다 한개의 thread가 수행되어야 한다는 의미입니다.
  • Loop Count : 각각의 Thread가 몇 번씩 실행할 것인지를 나타냅니다.

 

저의 경우에는 토큰의 유효성을 체크해 진행하기 위해 아래와 같이 Test Plan에서 우클릭 > Add > Confing Element > HTTP  Header Manager를 생성 한 후, 토큰 인증을 위해 아래와 같이 구성해주었습니다.

 

테스트 할 페이지를 구성하기 위해 다음과 같이 Thread Group 우클릭 > Add > Sampler > HTTP Request를 생성해 줍니다. 아래와 같이 사용할 자원을 입력해줍니다.

테스트를 진행한 HTTP Request 의 내용은 아래와 같습니다.

  • Name : dashboard
  • Server Name or IP : http:// 를 제외한 주소를 입력해 줍니다.
  • Port Number : 80
  • Method : GET ( GET 방식으로 데이터를 조회하기 때문에 GET으로 설정 )
  • Path : /api/dashboard/summary
  • Parameters : 필요할 경우 파라미터를 입력해줍니다.

결과 확인

웹 스트레스 테스트의 결과를 다양한 뷰와 함께 확인해보기 위해서 저는 간단하게 Graph Results, Summary Report, View Results Tree 등을 추가해서 진행했습니다. 추가 방법으로는 Thread Group 우클릭 > Listener 아래의 다양한 리포팅 방법 중에 취향에 따라 선택해서 확인하면 됩니다.

1) Graph Results

Graph Results는 전체적인 결과를 그래프의 형태로 표현해주기 때문에 시각적으로 한눈에 확인이 되는 것으로 보입니다. 

 

2) Summary Report

결과 값이 표 형태로 나오게 되는데, 차례대로 Label (HTTP Request의 이름), #Sample (서버에 요청한 횟수), Average (평균 응답 시간 ms), Min(최소 응답 시간 ms), Max(최대 응답 시간 ms), Error (에러 발생 율) 등 다양한 내용을 표의 형태로 정량적으로 나타내줍니다.

 

3) View Result Tree

View Result Tree의 경우에는 요청에 대한 request의 정보 및 response의 정보들을 확인해 볼 수 있으며, 성공의 경우에는 초록색으로 표현이 되고, 에러의 경우에는 빨간색으로 표현을 해서 전체적인 내용을 한번에 확인해 볼 수 있는 장점이 있습니다.

JMeter 동작 방식

이상으로 포스팅을 마치도록 하겠습니다. :)

참고 사이트

https://jmeter.apache.org/

https://jmeter.apache.org/usermanual/index.html