본문 바로가기

성능테스트/Jmeter

[ Jmeter ] 키워드 별 Jmeter 사용 방안

반응형

성능테스터가 JMeter를 통해 Script준비 및 테스트 수행시 필요한 활동 키워드 별로 내용을 정리하였다. 각 키워드에 대한 디테일한 설명보다는 대표적 케이스만 간략히 설명하였다. 

recording, replay, correlation, data parameter, unique once, 

 

1. Recording

1) HTTP(S) Test Script Recorder를 추가

Test Plan -> Add -> Non-Test Elements -> HTTP(S) Test Script Recorder

2) HTTP(S) Test Script Recorder 설정

Default port는 8888인데 8887로 변경하였다. 레코딩되는 sampler들이 저장될 타겟을 Target Controller에 지정한다. 예제는 만들어둔 "01Roles" Thread group를 지정하였다. 

3) Browser Proxy설정

브라우져의 Proxy설정을 한다. JMeter Recoder에서 지정한 포트와 동일하게 8887로 변경하였다. 

4) Recording

사용자 Transaction마다 Recorder의 Start버튼을 눌러 Recording한다. Start버튼 -> Browser 액션 -> Stop버튼 과정을 반복한다. 지정된 01Roles Thread group에 http sampler들이 저장된다.

2. Script Replay

Script가 정상동작하는지 확인하기 위해 Replay해보고 받은 http response값이 정상인지 확인한다.

1) View Result Tree 추가

2) Replay

01Roles Threadgroup이 Default로 user 1명 loop count 1인 상태에서 Replay한다.

3) View Result Tree 확인

http sampler별로 Request, Response에 대한 Header, Body값을 확인 할 수 있다. 아래에서는 Correlation처리가 되지 않아 1건이 에러가 발생하였다.

 

3. Cookie

쿠키처리가 필요한 경우 HTTP Cookie Manager를 추가해야한다. 아래와 같이 Name, Value, Domain, Path등을 등록 해준다.

Add -> Config Element -> HTTP Cookie Manager

이후 리플레이 해보면 아래와 같이 쿠키가 추가된 것을 확인할 수 있는데 특이 사항은 Request Body쪽에 보인다.

4. Correlation

여러 방법이 있지만 Regular Expression Extractor를 통해 원하는 값을 변수로 저장하고, 해당 변수를 사용하는 형태로 진행하였다.

1) Regular Expression Extractor 추가

2) Regural Expression Extrator 설정

변수명, 정규식, 그룹번호 등을 아래와 같이 지정한다. 아래 정규식은 left boundary값 pageToken":", right boundary값 "}; 사이에 모든 숫자 영문이 들어오는 경우이다. 필요에 따라 수정하여 사용하면 된다.

Name of created variable : pageToken

Regural Expression : pageToken":"([0-9a-zA-Z]+)"};

Templete ($i$ where i is capturing group number, starts at 1) : $1$

3) 저장된 변수 값 확인

Debug Sampler를 ThreadGroup에 추가하여 replay후에 View Result Tree에서 아래와 같이 저장된 변수값을 확인한다.

4) 변수값 치환

변경된 변수값을 적용해야 할 HTTP sampler에 Http Request Body의 page_Token값을 변수로 치환한다.

변경 전 : v.fp.page_token=9ba5af3debfd2920103836f8bb8f5983&volatile.is_server_background_call=true

변경 후 : v.fp.page_token=${pageToken}&volatile.is_server_background_call=true

5) Replay를 통해 정상처리 확인

replay 후 view result Tree에서 치환된 변수를 사용하는 Request에 대한 응답이 정상적으로 왔는지 확인한다.

5. Validation

Loadrunner에서 web_reg_find와 같은 함수를 통해 Http Response에 대해 응답이 맞게 왔는지 Validation처리를 할 수 있다. JMeter에서는 response Assertion을 통해 Validation작업을  할 수 있다.

1) Response Assertion추가

Add -> Assertions -> Response Assertion

Response body를 검증하고자 하는 Http Sampler에서 Response Assertion를 아래와 같이 추가한다. 

2) Response Assertion 설정

Response Assertion을 아래와 같이 설정하여 Response Body에 특정값이 포함되어있으면 Success 없으면 Fail이 떨어지도록 간단하게 설정할 수 있다. 보다 다양한 방법은 검색하여 사용하면 된다.

Apply to : Main samply only

Field to Test : Text Response

Pattern Matching Rules : Contains

Pattern to Test : activeUserNodeName(포함해야할 문자열, 필요에 따라 수정필요)

3) replay 확인

"01Roles/?dp=admin_pages.roles.get_data-22" response body에 "activeUserNodeName"값이 포함되어 성공처리되었음을 확인할 수 있다. 없으면 Fail처리 된다.

6. 테스트 시나리오 구조

JMeter를 아래와 같은 구조로 구성하면 Loadrunner로 테스트 시와 비슷한 형태로 테스트를 수행할 수 있다.

시나리오 = TestPlan 

스크립트 = ThreadGroup

스크립트 Init = Once Only Controller

스크립트 Action = Runtime Controller

 

아래는 01Roles와 02Tasks 2개의 ThreadGroup으로 구성되어있다. 각 ThreadGroup에서 유저수, Ramp-up period을 지정하고 Runtime Controller에서 Runtime(수행시간)을 지정할 수 있다. 

 

 

7. 부하발생기 구성

대용량 부하 분산 테스트를 할 때는 한 대의 부하발생기로는 불가하고, 여러 대의 부하발생기를 병렬로 연결해서 동시에 테스트 해야한다. Jmeter가 jmeter-server를 원격에서 실행할 수 있는 Remote Testing 기능 제공한다.

 

열여줘야 하는 PORT : 2099, 4000~4002
jmeter controller : 실제로 부하 발생시키는 jmeter-server에 명령을 전달. Master역할.
jmeter server : 실제로 부하 발생하는 노드. jmeter-controller에서 받은 명령 수행하고 그 결과를 다시 jmeter-controller에 전달하는 Slave역할.
(Master와 Slave의 Jmeter버전 동일하게 맞춰줘야함.)

1) 연결 설정

/bin/jemter.properties 파일에서 설정 수정

1.1) Jmeter controller 설정 (master PC)
-remote_hosts 부분에 원격 연결할 서버 ip들을 ,로 구분해서 입력한다. (port를 따로 입력하지 않으면 default값 1099가 된다.)


-client.rmi.localport 부분에 port 입력



1.2) Jmeter server 설정(slave PC)

server_port 부분에 port 입력 & server.rmi.localport 부분에 port입력

1.3) Master,slave 둘 다 방화벽에서 포트 열기(참고 : https://wiki.mcneel.com/ko/zoo/window7firewall)
나 같은 경우는 이렇게 포트열어도 안됐다가 V3쪽의 방화벽도 있길래 개인방화벽 규칙 추가해서 포트 열어주었음.
-> cmd에서 telnet 이용해 Master에서 slave로 접속 되는지 체크

1.4) Master, slave모두에서 hmx 및 설정파일들을 동일하게 bin폴더 밑에 둔다.

 

1.5) slave PC에서 jmeter-server.bat 을 실행시킨다.

이런 식으로 나오면 정상구동이다.


1.6) Master PC에서 jmeter.bat실행하여 Run->Remote Start 에서 설정한 ip들 확인

1.7) Master PC에서 Remote Start 시키고 Slave PC의 server에 나오는지 확인
Starting...... 나오면 성공

1.8) 만약 연결 시 SSL Exception 에러가 나거나, jmeter-server 부분에서 rmi_keystore.jks 파일 찾을 수 없다고 나온다면 해당 부분 true로 수정

 

 

반응형