top bar

글 목록

2016년 2월 12일 금요일

[Performance] The Grinder 3 (3) - 테스트 수행 및 리포트 산출

샘플 스크립트 작성



아주 간단한 HTTP Get 요청을 수행하는 스크립트를 작성해 본다.
그라인더 설치 디렉토리의 'example' 밑에 있는 스크립트를 참고하여 작성해보았다
import string
import random

from java.lang import String
from java.net import URLEncoder
from net.grinder.script import Test
from net.grinder.plugin.http import HTTPRequest
from net.grinder.common import GrinderException
from net.grinder.script.Grinder import grinder

# Server Properties
SERVER = "http://10.113.182.195:9001"
URI = "/test.jsp"

test = Test(1, "http_test")

class TestRunner:
    def __call__(self):
        request = HTTPRequest()
        requestString = "%s%s" % (SERVER, URI)
        test.record(request)
        result = request.GET(requestString)
        
        print "# Response text :", result.text
이전 포스트에서 언급했지만 그라인더는 'Jython' 스크립트를 사용해 부하 테스트를 수행 한다. 위의 코드는 HTTP Get 요청을 수행하는 간단한 스크립트이다.

위 파일을 'simplehttp.py' 라는 이름으로 저장하고, 'D:\grinder\python_source\grinder' 경로에 두었다. 따라서 'grinder.properties' 파일의 'grinder.script' 값을 아래와 같이 수정한다.
grinder.script = d:/grinder/python_source/grinder/simplehttp.py


테스트 수행



테스트하기 전, 프로세스와 스레드, 실행 횟수도 알맞게 설정해보자.
grinder.processes = 1
grinder.threads = 10
grinder.runs = 100
Agent 프로세스는 1개, 그 안에서 돌아가는 스레드를 50개로 설정 하였고, 각 스레드의 실행횟수는 100번으로 설정 하였다.

그리고 아래의 'start collecting' 버튼을 클릭한다.


















그러면 'Collection stopped' 라는 메시지가 'Wating for samples' 라고 바뀔 것이다. 이제 Worker Agent로부터 샘플 데이터를 기다리는 상태가 된것이다.

이제 아래의 'Start the Worker processes' 버튼을 클릭하여 Worker Agent를 구동시킨다.


















해당 버튼을 클릭하면 Agent 에 아래와 같은 로그가 찍힌다.












grinder.processes 값이 2이기때문에 2개의 Worker 프로세스가 시작된다. 특별히 정해진 네이밍 규칙이 있는데 '[host이름]-[seq번호]' 와 같은 식이다.

Agent 가 실행되면 'grinder.properties'파일의 grinder.consoleHost 와, grinder.consolePort 에 설정한(default는 localhost, 6372 이다) 호스트와 포트를 통해 수집된 데이터를 콘솔로 보낸다.

이때 Console창의 'Results' 탭을 보면 아래와 같이 수집되고 있는 데이터가 실시간으로 변화하는 모습을 볼 수 있다.





















TPS, Mean Time 등의 용어들은 알아서 찾아보자! (이것도 시간나면 정리해야겠다)


GrinderAnalyzer를 이용한 리포트 산출



테스트를 완료하면 그라인더 'log' 디렉토리에 아래와 같은 로그가 쌓인다.












위 사진을 보면, 'host-n.log' 의 형식으로 생성되는 각 프로세스별 정보 로그 파일과, 'host-n-data.log' 형식으로 생성되는 각 테스트 건별 데이터 로그 파일이 보인다.

파일을 열어보면 알겠지만 건당 수행 결과와 측정 요소들의 값들이 로그로 잔뜩 찍혀 있는 것을 볼 수 있다. 이것은 두말 할 것 없이 한 눈에 보기가 불가능하다.

하지만 'GrinderAnalyzer' 라는 툴을 사용하면 위의 정보들을 종합하여
보기좋게 결과 리포트를 생성해준다.

아래에서 다운 받는다

http://track.sourceforge.net/analyzer.html

다운 받은 파일을 압축 해제 하면 아래와 같은 구조가 보일 것이다.
















일단 윈도우 커맨드 창을 이용해 위의 'analyzer.py' 파일이 있는
디렉토리까지 이동한다.

그리고 아래와 같은 명령어를 입력 해보자.
(물론 jython home 경로가 윈도우 환경변수의 'path' 에 추가되어 있어야 한다.)
> jython analyzer.py "D:\grinder\grinder-3.11\log\hong-0-data.log D:
\grinder\grinder-3.11\log\hong-1-data.log" D:\grinder\grinder-3.11\log\hong-1.log 1
'jython analyzer.py' 다음에 쌍따옴표안에는 각 data log 파일의 '절대경로' 목록을 스페이스로 구분하여 입력한다. 그 다음에는 마지막 프로세스의 로그 파일인 'hong-1.log' 파일의 절대 경로를 입력한다.

마지막 파라미터로 주어지는 값은 몇개의 머신에서 Agent를 실행 시켰는지에 대한 값인데, 하나의 로컬 PC에서 Agent를 구동 하였으므로 '1'을 입력한다

위 명령어를 실행하면 아래와 같이 콘솔창에 로그가 찍힐 것이다.



































그러고 나면 'grinderReport' 라는 폴더가 생성되어 있을 것이다.


















해당 폴더안에 'report.html' 파일을 브라우저로 열어보자.
아래와 같이 테스트 수행 결과가 보기좋게 그래프와 표로 정리되어 나타난다.



















마치며...



이것으로 그라인더 설치, 설정, 테스트 수행, 결과 리포트 산출까지 모든 정리를 마쳤다.

이외에도 그라인더를 다양한 방법과 스크립트를 이용해 사용할 수 있지만, 차차 기회가 되면 정리해보도록 하겠다.

댓글 없음:

댓글 쓰기