OpenSource

성능테스트용 Tool - jMeter [펌]

아르비스 2016. 3. 21. 16:23

기종 부하 발생기로, loadrunner를 사용했으나, license 문제로, JMeter를 사용해보기로 한다.


1. JMeter의 소개 


JMeter는 Apache Jakarta 프로젝트의 일환으로 만들어진 테스트 기능과 퍼포먼스를 측정하는 애플리케이션이다. 이 애플리케이션 100% 순수 자바로 작성되었으며 원래 웹 애플리케이션을 위해 디자인되고 사용되었으나 현재는 다른 기능의 테스트를 위해 확장되고 있다. 


JMeter는 static, dynamic 한 모든 자원(파일, 서블릿, perl script, java object, database and query, ftp, soap 등)에 대해 퍼포먼스를 테스트할 수 있다. 이러한 테스트 결과로 분석결과를 그래픽으로 표시해주는 기능과 스크립트 객체 등에 대해 과도한 동시 처리 부하가 가능하다. 


Apache Jmeter는 다음 사이트에서 얻을 수 있다. 


http://jakarta.apache.org/jmeter/ 


JMeter에 대한 추가 정보는 위 사이트에서 얻을 수 있다. 한데 위 사이트는 영어로 구성되어 있기 때문에 조금 빈약하더라도 한국어로 된 정보는 자카르타 서울 프로젝트에서 얻을 수 있다. 


http://jakarta.apache-korea.org 


2. 다운로드 및 설치


Download : http://jmeter.apache.org/download_jmeter.cgi


(currnet:  http://apache.mirror.cdnetworks.com//jmeter/binaries/apache-jmeter-2.13.tgz)


위 경로에서 current 버전 download 한다.


관련 plugin 설치

http://jmeter-plugins.org/downloads/all/

위 주소에서 다운받고, 압축 푼 후  jMeter 설치 디렉토리 \lib\ext  안에 복사해 주면 자동으로 인식한다.

plugin은 Standard Set, Extra Set 등 종류별로 다운 받을수 있으며, 상세내역 확인 해 보자.


3. 실행

jMeter 의 압축을 푼 directory내 jmeter.bat를 실행함.


ex) c:\apache-jmeter-2.13\bin\jmeter.bat


4. JMeter 동작방식

  - Sampler : 사용자의 행동 대행 (Request)

  - Listener : 처리결과에 대한 data 표시 (Response)

  - ThreadGroup : 각종 Test 진행

    

 

  JMeter 안에는 여러개의 Thread를 구성할 수 있으며, 하나의 Thread 당 하나의 URL을 매핑 시킬 수 있다.

 하나의 Thread를 하나의 ThreadGroup으로 생성하여 관리함.


5. Test

 1) Test Plan 추가




2) Thread Group 생성



- "Number of Threads(Users)" : 동시사용자 수

- "Ramp-up Period(in Seconds)" : 사용자(Thread) 증가 시간,  사용자를 서서히 증가시킬때 사용.

- "Loop Count" : 반복횟수



[HTTP Request] Test



http Request 설정



위 처럼 "http://"를 제외한, 주소를 적어준다.

https의 경우 port number를 443으로 입력함.


[View Results Tree]

- 각 요청에 대한 응답, 실제 data를 보여줌.

- Response data tap에 보면, Response에 대한 상세 값을 확인가능





[Summary Report]

- 요청횟수, 응답시간에 대한 평균, 최소, 최대, 에러율 등에 대한 값을 나타냄.

- Throughput은 초당 처리가능한 요청 횟수를 나타냄




- 1: 서버에 요청한 횟수

- 2: 평균 응답시간

- 3: 최소응답시간(ms)

- 4: 최대응답시간(ms)

- 5: Error율(%)


* Plugin

의미 있는 결과를 보기위해서

"Response Time Over Time 리스너" 추가



"Transaction Throughput vs Threads" 차트 

 - 동시접속 사용자수에 따른 전송Data량 확인



" Response Time vs Threads" 차트

- 동시접속자수에 따른 응답시간 변화 확인



만약 사용자가 늘수록 응답시간이 늘어난다면, 아파치 성능에 비하여, 로직이 무거워, 리소스 반환이 늦어지는것으로 튜닝이 필요하다고 볼 수 있다.



[HTTP 요청 자동 생성] - Recording

여러 url을 테스트할경우 각각의 http 요청 샘플러를 작성하려면 시간이 아주 많이 필요합니다.

이런 경우를 대비하여 jMeter는 사용자의 웹사이트 이동을 자동으로 레코딩 하는 기능을 제공합니다.

이 기능을 이용하면, 테스트하려는 사이트를 이리저리 돌아다니기만 해도, 필요한 요청을 모두 자동으로 생성해 줍니다.

(사용자의 행동을 똑같이 모사해 냅니다)


workBench (test plan이 아니라..)를 우클릭하여 proxy server를 추가함.

(사용자의 모든 행동이 proxy를 통해서 이루어 지므로, 모두 레코딩 할 수 있게 된다.



다른 설정 필요 없이, port만 기존것과 충돌 되지 않도록 설정하면 된다.



그리고 IE 옵션에서 proxy사용하는 것으로 설정함. 이때 포트는 위에서 정한것과 같아야 함.


이후 jMeter에서 proxy를 시작한다.



만약 로그인이 필요한 페이지를 테스트 하려면, 반드시 http cookie manager가 추가되어 있어야 한다.



이제 테스트하려는 페이지를 웹브라우저를 이용하여 시나리오대로 이동한다.

그러면, 아래와 같이 내 이동경로에 따른 모든 요청이 자동으로 기록된다.


이제 proxy를 끄고 (workbench에서 stop하고, browser의 옵션설정에서도 proxy 사용안함으로 설정)


Jmeter에서 play버튼을 누르면, 내가 수동으로 했던것과 똑같은 행동을 jMeter가 해준다.


https://jmeter.apache.org/usermanual/jmeter_proxy_step_by_step.pdf

Record Script가 좀 변경되었다.

자세한사항은 위 pdf 참조..!!


해보자..!! Just Do it!


[테스트결과 지우기]



테스트 반복실행시, 기존 결과를 누적해서 보여주므로, 새로운 설정 적용시 기존 data를 지우고 테스트 할 것.



[참조 site ]

http://soul0.tistory.com/279

http://hwangmin84.tistory.com/21

http://codeigniter-kr.org/bbs/view/lecture?idx=7082