반응형

Apache JMeter



I. Apache JMeter

 

Apache JMeter는 100% 순수 자바로 만든 퍼포먼스 테스팅 도구 입니다.

기본적으로는 Web Application을 테스팅 하는데 디자인 되었지만 다른 기능들도 테스트 할 수 있도록 확장되었답니다


그럼 Apache JMeter로 무엇을 할 수 있을까요?

JMeter는 정적인 것 뿐만 아니라 동적인 자원 (files, Servlet, Perl, Java Object, DataBase 와 Queries, FTP Servers 등) 둘다 성능을 테스트 하는데 사용됩니다. 즉 서버나 네트웍 혹은 Object에 스트레스를 가하여 다양한 형태의 상태에서 성능을 전반적으로 분석 할 수 있도록 도와준다는 겁니다.


그럼 JMeter의 특징을 간단히 살펴보죵.

-. HTTP나 FTP서버 뿐만 아니라 임의의 데이터베이스 쿼리도 성능을 테스트 할 수 있습니다.

-. 100% 순수 자바로 구현되었기 때문에 기종에 상관없이 실행 할 수 있습니다.

-. Swing 기반의 Componet를 지원합니다.

-. Multithreading 기능을 이용하여 동시에 많은 Thread를 발생 시킬수도 있으며 혹은 독립된 Thread를 연속적으로 발생시켜 테스팅 할 수도 있습니다

-. GUI 환경으로 빠른 작업을 정확하게 할 수 있답니다.

-. 캐싱된 결과를 분석하고 재현 할 수 있습니다.

-. 높은 확장성이 있습니다.


II. 다운로드


다운 로드는 요기서..

http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi



III. 설치 및 실행

 

설치전 요구사항을 알아봅시다

먼저 jdk 1.4 이상이어야 합니다. jdk 1.4.1 이하버젼에서는 GUI elements가 잘 작동하지 않는 다는 bug가 레포팅 되었습니다. 운영체제는  unix (solaris, linux) 및  Widnows 계열 모두 잘 작동합니다.


그럼 다운 받은 파일의 압축을 풀어봅시다. 제가 받은 파일은 2.0.2버젼이군요


잠깐 디렉토리 구조를 보지요.

/bin 에는 실행관련 파일들이 들어있습니다.

/docs 와 /printable_docs에는 사용자 매뉴얼과 데모가 들어있습니다.

/extras 는 JMeter를 ant로 바로 실행할수 있도록 하는 설명이 들어있고요

/lib에는 JMeter를 실행하면서 로딩해야할 다른 서드 파티 jar파일을 넣으면 됩니다 만약 JDBC 테스팅을 한다면 해당하는 벤더의 JDBC를 넣으면 되겠네요


ㅈ ㅏ ~ 그럼 실행해 봅시다 /bin/jmeter.bat 을 따블클릭 합니다.


 

IV. 테스트 계획 수립

 

테스트 시작 전 먼저 계획을 수립해봅시다 어떻게 해야 할까요?

그냥 쉽게 일반적으로 생각해 봅시다

1) 테스트 인원 및 몇번을 반복할 지 결정한다
2) 첫화면을 간다
3) 로그인 페이지로 간다
4) 500ms 정도 쉰다 (로그인 아이디, 패스워드 입력시간)
5) 로그인을 한다
6) 메뉴를 하나씩 클릭한다
7) 특별한 메뉴는 반복적으로 클릭한다.
8) 또한 어떤 메뉴는 딱 한번만 클릭해야 한다.
9) 또한 다른 메뉴는 랜덤하게 클릭한다.
등의 정도가 되겠지요..

그럼 이러한 작업들이 모두 JMeter로 가능한가? YES!!



V. 초간단 테스트 예제

 

자 그럼 먼저 간단한 예제를 한번 만들어 봅시다.



먼저 JMeter를 실행하면 다음과 같은 화면이 나올겁니다.

많이 보고 얼렁 익숙해 집시다.













왼쪽편에 'Test Plan'이라는 노드가 보이는데 이 노드는 테스트 계획을 나타낼 일련의 실행 코드 집합 이라고 보면 됩니다 (말이 좀 어렵낭?-_-?)


중간에 User Defined Variables 라고 나오는데 이건 뭔지 저도 잘 모루겠습니다 -_-;

암튼 분명한건 여기서 정의한 변수 및 값은 테스트 플랜 이하 노드에서 모두 상속받아 사용한다는 겁니다.


다음에 체크박스 두개가 있는데 첫번째 'Run each Thread..' 요놈은 Thread를 순차적으로 실행 하겠냐 아니면 동시에 실행하겠냐의 여부를 묻는데 체크하지 않으면 동시에 실행 하는걸로 되어 있습니다. 여기서 Thread란 조금 후에 설명 하겠습니다. 두번째 체크박스는 각 요청에대한 서버의 응답 데이터를 파일에 기록할 것인지 여부를 말하는 것인데 이걸 체크하면 성능이 확~ 떨어지니 왠만함 하지 말라고 되어있습니다.


자 이제 본격적으로 시작해 봅시다. 'Test Plan'을 오른쪽 마우스로 클릭해 봅시다



















Thread Group 이란 테스트 계획을 수행할 수행 단위 그룹이라 보면 될것 같습니다. 이 Thread Group을 여러개 추가 할 수도 있으며 그럴 경우 위에서 언급한 체크박스로 동시에 실행 할 것인지 순차적으로 실행 할 것인지 결정 해야 합니다.



















그럼 이름을 뭘로 할까요? 'Jakarta Project'라 하지요 -_-;

ㅈ ㅏ 이름을 'Jakarta Project'라 하였습니다 멋집니다 ;;


가운데 체크박스 3개가 있네요

이건 만약 테스트 수행도중 에러(테스트 대상의 에러)가 발생 한 경우 계속할 것인지 Thread만 멈출 것인지 아니면 테스트 자체를 멈출것인지를 선택합니다 여기선 그냥 'Continue'로 하지요


그다음 항목이 가장 중요하므로 잘 숙지해야 합니다.

Number Of Threads 란 이 Thread Group이 생성할 Thread갯수를 말하는데, 쉽게 말하면 이 그룹에서는 몇 사람으로 테스트 할 것이냐 라고 생각하면 됩니다.

Ramp-Up Period (in seconds)는 한 Thread가 시작 된 후 다음 Thread가 시작 될 때까지의 대기 시간을 의미합니다 예를 들어 보자면 10개의 Thread가 사용되고 Ramp-up Period가 50이라면 총 10개의 Thread가 모두 실행되려면 50초가 걸린다는 겁니다. 즉 평균적으로 보자면 한 Thread가 실행 후 다름 Thread까지 5(50/10)초정도 후에 실행 되다는 거지요 (휴 어렵다 =3)

Loop Count는 실행 횟수를 말합니다. forever에 체크하면 무한 루프를 돕니다. 이때는 사용자가 수동으로 STOP 시켜줘야 합니다.


이제 'Jakarta Project'에 마우스를 오른쪽으로 클릭 후 'Add -> Config Element -> HTTP Request Defaults'를 선택합니다.

















이 'HTTP Request Defaults'는 HTTP request를 설정함에 있어서 이 노드 이하의 HTTP request는 모두 HTTP Request Defaults에서 설정한 값을 디폴트로 상속 받아 사용하겠다는 겁니다.


반드시 추가해야 할 필수 요소는 아닙니다만 이후의 추가해야 할 HTTP Request노드가 많다면 일일이 다 다음과 같이 세팅해야 함으로 이를 추가해 놓는 편이 좋습니다.


Protocol에는 당연히 웹이니 HTTP를 써야겠고 Server name or ip에는 연결할 서버의 이름이나 ip를 적습니다. 주의할것은 주소까지 모두 여기에 적으면 안됩니다. 나머지 부분은 path 부분에 적어야 합니다.


예를들어 naver에서 jsp를 입력하여 찾기하면 다음 주소가 생기는데 이 예를 들어보도록 하지요 http://search.naver.com/search.naver?where=nexearch&query=jsp&frm=t1

protocol : http

servarname or ip : search.naver.com

path : search.naver

parameter name : where, query, frm

parameter value : nexearch, jsp, t1

을 입력하면 OK~


하지만 위의 설정값 세팅으로 완료된 것이 아닙니다. 이제부터 테스트 실행을 하기 위한

실질적인 노드를 추가해야 합니다.

'Jakarta Project'를 오른쪽 마우스로 클릭하여 'Add -> Sampler -> HTTP Request'를 선택합니다.


















HTTP Request는 HTTP요청을 웹서버에 전송하여 그 결과를 받아오는 Sampler입니다.

우리는 좀전에 세팅한 HTTP Request Default의 값을 모두 상속하여 사용할 것이기 때문에 여기서 특별히 세팅할 것이 없습니다.


이제 request에 대한 준비는 되었고.. 이제 그에 대한 응답을 어떻게 분석 할 것인지에 대해 준비를 해 봅시다.


'Jakarta Project'를 역시나 오른쪽 마우스로 클릭하여 'Add -> Listener -> View Results Tree와 Graph Results'를 추가합니다


모든게 ㄷ ㅏ ~ 준비되었습니다. 이제 실행해 보도록 하지요!

이제 상위 메뉴중 'RUN -> START'를 클릭해봅시다.

그러면 우측 상단에 있던 아주 자그마한 네모박스가 연두색 으로 표시됩니다. 이 표시가 현재 테스트중이라는 표시입니다. Thrad Group에 세팅된 정보에 의해 딱 10번 request가 가게 될 것입니다.



















먼저 View Result Tree부터 테스트 실행 결과를 봅시다.

각 HTTP Request 에 대해 여러 정보들을 표시해 주는군요!


첫번째 탭인 'Sampler result'에는 load time, response code, response header, server, content-type, length등의 정보가 표시된니다.


두번째 탭인 'Request'에는 request형태가 표시 되는군요

세번째 텝인 'Response data'에는 응답받은 Html 코드를 보여주며 또한 이를 Render해서 보여줍니다.



















'Graph Result'를 봅시다. 이 그림은 Thread Group에서 loop count를 forever해서 나타낸 그림입니다. 비쥬얼 하죠?


















간단하죠? 여기서 배운것을 바탕으로 응용하면 어떠한 테스트 계획이든지 실행 가능 하답니다. 자 다음 시간에는 JMeter의 고급사용법을 알아보도록 하겠습니다.


=============================================

본문서는 자유롭게 배포/복사 할수 있지만

이문서의 저자에 대한 언급을 삭제하시면 안됩니다

저자 : GoodBug (unicorn@jakartaproject.com)

최초 : http://www.jakartaproject.com 

=============================================

Posted by 1010