'52.Apache Project &.../Apache JMeter'에 해당되는 글 2건

  1. 2008.08.19 Apache JMeter
  2. 2008.08.19 Apache JMeter I탄 기본편
반응형

Apache JMeter



VI. 테스트 구성단위

 

앞의 예제에서 대강의 테스팅 흐름을 살펴보았습니다. 이제 각각의 요소별로 자세히 알아봅시다.


크게 보면 다음 7가지 요소들로 나누어집니다.

1. 쓰레드 그룹 (Thread Group)

쓰레드 그룹은 테스팅에 있어 시작점이 되며 모든 요소들은 최소한 하나의 쓰레드 그룹에 속해야 합니다.


쓰레드 프러퍼티부분이 가장 중요하며 테스팅의 효과를 어떻게 얻을 것인지 결정하게 됩니다. 쓰레드 프러퍼티는 다음과 같이 생각할 수 있습니다.

① 쓰레드 갯수 : 몇명으로 테스트할 것인가?

② 램업 주기 : 얼마나 빨리 테스트 할 것인가?

③ 반복 수 : 얼마나 많이 테스트 할 것인가?


만약 쓰래드 갯수를 20개, 랩업 주기를 100초, 반복 수를 2로 하였다면 전체 테스트 수는 40(20x2 )번이 테스팅 되며, 한 쓰레드가 실행 후 다음 쓰레드 실행 까지는 5(100/20)초가 걸리며 총 수행 시간은 100초 입니다.

쉽죵?

만약 무한반복을 하고자 한다면 forever에 체크하세요


1.9버젼부터는 스케쥴 기능이 추가되었습니다. 시작시간과 종료시간을 입력하면 메뉴에서 RUN하지 않아도 시작시간에 맞춰 실행하게 됩니다.


2. 컨트롤러 (Controller)

컨트롤러란 서버에 테스트 요청을 전달 할 때 무엇을 언제 보낼지를 지시합니다.

샘플러(Sampler, 무엇을)와 로직(Logic Controller, 언제) 두가지 타입이 있습니다.


2-1. 샘플러(Sampler)

샘플러는 테스트 서버에게 HTTP 요청을 보내고 싶으면 HTTP 요청 샘플러를, FTP 요청을 보내고 싶으면 FTP 요청 샘플러를 추가하면 됩니다.


좌측의 그림은 샘플러 종류를 나타냅니다.

정말 다양한 요청이 지원되고 있습니다.


만약 서버에 같은 타입의 요청을 다중으로 보내고자 한다면 Config Element의 디폴트 요소를 사용하는것이 편리합니다. (예: HTTP Request Default)










2-2. 로직 컨트롤러(Logic Controller)

로직 컨트롤러는 언제 요청을 전달해야 하는지 결정합니다. 다음 예를봅시다.

  • Test Plan
    • Thread Group
      • Once Only Controller
        • Login Request (an HTTP Request)
      • Load Search Page (HTTP Sampler)
      • Interleave Controller
        • Search "A" (HTTP Sampler)
        • Search "B" (HTTP Sampler)
        • HTTP default request (Configuration Element)
      • HTTP default request (Configuration Element)
      • Cookie Manager (Configuration Element)

    HTTP default request와 Cookie Manager가 Thread Group에 추가되어 있다는 것을 유의깊게 봅시다. 그리고 Interleave Controller에도 HTTP default request가 있습니다.

    ① Once Only 컨크롤러에 의해 로그인 요청은 딱 한번 요청이 됩니다. 이후의 반복작업에서는 이 작업이 스킵이 되게 됩니다.

    ② 그다음 검색 페이지를 요청합니다. 이 요청은 어떠한 컨트롤러도 개입이 되어있지 않습니다.

    ③ 검색페이지에서 "A"를 검색합니다. Interleave 컨트롤러의해 다음 반복 작업때에는 "B"를 검색합니다. 즉 순서를 돌아가며 실행 된다는 것입니다.


    이처럼 로직 컨트롤러는 다양한 구성요소의 조합을 가능 하게 해 줍니다.


    좌측 그림은 컨트롤러의 종류를 보여줍니다.


    대부분 이름만으로 짐작 가능한 컨트롤러이니 그리 어렵지는 않을 겁니다 ^^
















    3. 리스너(Listener)

    리스너는 테스팅한 결과의 정보를 나타내는데 사용됩니다. 즉 결과를 레포팅 해주는 것이죠

    어떤 위치든지 추가될 수 있으며 그 요소에 해당하는 데이터나 그 이하 노드에 해당하는 데이터들만 수집하게 됩니다.

    가장 간단한 Graph Result 리스너는 응답시간을 그래프에 뿌려줍니다.


    좌측 그림은 리스너의 종류들입니다.













    4. 타이머(Timer)

    기본적으로 JMeter는 요청들을 쉴틈없이 테스트 서버로 보내게 되는데 만약 아주 짧은 시간에 상당한 양의 요청들을 보낸다면 서버가 뻗어 버릴지도 모릅니다.

    타이머는 쓰레드가 만들어 내는 각 요청들 사이에 특정 시간만큼 딜레이를 주는 역할을 합니다.








    5. 어서션 (Assertions)

    어서션은 테스트 요청에 대한 응답이 제대로 된 응답인지 그 유효성을 검증해줍니다.

    예를들어 테스트 요청에 대한 응답이 어느 특정 텍스트를 포함하고 있는지를 확인 해 볼 수 있다는 것입니다.

    어서션의 결과를 볼려면 어서션 리스너를 추가해야 한답니다.


    좌측 그림은 어서션의 종류를 나타냅니다.









    이상 JMeter의 구성요소들에 대해 간략히 살펴보았습니다.


    다음 레퍼런스 사이트를 참조 하면서 테스트 계획을 구성, 실행한다면 상당히 괜찮은 테스트 시나리오를 만들 수 있습니다.

    http://jakarta.apache.org/jmeter/usermanual/component_reference.html


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

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

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

    저자 : GoodBug (unicorn@jakartaproject.com)

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

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

  • Posted by 1010
    반응형

    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