JMeter 설치 및 기본사용법

“Apache Jmeter는 Java 기반 부하테스트용 오픈소스 프로그램 입니다. 서비스 론칭 전 동시접속자 증가에 따른 품질을 예측하고 문제가 될 부분을 개선하여  서비스 품질을 향상 하는데 도움이 됩니다.

여기서는 윈도우 환경에 Jmeter를 설치하는 방법과 Element 그룹에 관한 설명, 간단한 웹애플리케이션에 부하테스트 방법을 알아보겠습니다.”

The Apache JMeter™ application is open source software, a 100% pure Java application designed to load test functional behavior and measure performance. It was originally designed for testing Web Applications but has since expanded to other test functions.

공식사이트 : https://jmeter.apache.org/


1. Jmeter 윈도우 PC 설치
 1) JDK 또는 JRE 설치 (Windows 오프라인 64비트 다운받아 설치합니다.)
2) https://jmeter.apache.org/download_jmeter.cgi 에서 zip 파일 다운받아 압축해제 합니다. 압축 해제한 폴더를 C:\Program Files\apache-jmeter-4.0 식으로 옮기고
3) “\~jmeter 경로\bin\jmeterw.cmd” 파일을 실행하면 JMeter가 실행됩니다.

2. 플러그인 설치 (오프라인)
1) https://jmeter-plugins.org/downloads/old/ 에서 JMeterPlugins-Standard-1.4.0.zip, JMeterPlugins-Extras-1.4.0.zip, JMeterPlugins-ExtrasLibs-1.4.0.zip 등을 다운받아 압축해제 합니다.
2) zip 파일을 압축해제 후 ‘압축해제폴더\lib\ext’ 있는 모든 파일을 ‘Jmeter 설치폴더\lib\ext’ 로 복사 후 Jmeter 을 다시 실행합니다.
3) https://jmeter-plugins.org/?search=jpgc-functions에서 jpgc-functions를 다운받아 위 2) 과 같이 진행합니다.

3. Thread Group 설명
Number of Threads(users) : 가상 사용자의 숫자입니다.
Ramp-Up Period : 전체 Threads가 생성되는 Interval 입니다. 가령 Number of Threads 가 10이고
Ramp-Up Period가 30초이면 3초 마다 Threads 가 생성(사용자가 접속)
된다는 의미입니다.

4. Element 설명
1) Threads : Number of Threads(가상 사용자 수)와 테스트 시간, 반복회수 를 결정합니다.
Thread Group, setUp Thread Group, tearDown Thread Group

2) Samplers : Jmeter에서 제공하는 테스트 액션입니다.
AJP/1.3 Sampler, FTP Request, HTTP Request, JDBC Request, SMTP Sampler, TCP Sampler

3) Logic Controller : 언제 요청을 전달할지 결정하는 것으로 한번만, 조건, 반복, 랜덤 등 로직을 제공 사용합니다.
가령 Once Only Controller로 로그인은 한 번만 하고 데이터 입력은 Loop Controller로 반복작업 하도록 설정할 수 있습니다.
If Controller, Transaction Controller, Loop Controller, Once Only Controller, Random Controller

4) Pre Processors : 테스트 실행 전 실행되는 Element로 테스트 실행에 필요한 변수설정 등에 사용합니다.
JSR223 PreProcessor, User Parameters, HTML Link Parser, HTTP URL Re-writing Modifier등

5) Post Processors : 테스트 실행 중 실행되는 Element로 테스트 결과값에서 특정 문자열을 찾아서 변수에 저장하는 용도로 많이 사용합니다.
CSS/JQuery Extractor, JSON Extractor, Boundary Extractor, Regular Expression Extractor

6) Assertions : 테스트 결과값이 정상인지 확인하는 Element입니다.
Response Assertion, JSON Assertion, Size Assertion, JSR223 Assertion, XPath Assertion등

7) Timer : 서버로 요청 시 특정 시간만큼 딜레이를 주는 역할을 합니다.
Constant Timer, Uniform Random Timer, Precise Throughput Timer 등

8) Config Element :
CSV Data Set Config, HTTP Header Manager, HTTP Cookie Manager, HTTP Cache Manager, HTTP Request Defaults, Counter, DNS Cache Manager, FTP Request Defaults, HTTP Authorization Manager, JDBC Connection Configuration 등

9) Listener : 부하 테스트 결과를 통계나 그래프로 보여줍니다.
View Results Tree, Summary Report, Aggregate Report, Backend Listener, Aggregate Graph, Response Time Graph

10) Non-Test Elements : 웹 프록시 모드 등으로 작동하여 사용자의 http 행위를 녹화하여 스크립트를 자동으로 생성할 때 사용할 수 있습니다.
HTTP Mirror Server, HTTP(S) Test Script Recoder, Property Display


5-A. [실습] Piwigo 사진 등록 시나리오

* 실습하며 Element와 테스트 스크립트를 설명합니다. Piwigo 사진관리 웹애플리케이션에 자동로그인, 자동사진 등록하는 Test Plan작성 방법입니다. *

1) Jmeter 프로그램 Thread Group에 다음 엘리먼트를 추가합니다.
Config Element > HTTP Header Manager,
Config Element > HTTP Cookie Manager,
Post Processor > Regular Expression Extractor,
Logic Controller > Once Only Controller,
Listner > View Results Tree

2) Jmeter 를 프록시 모드로 작동하여 http 행위를 녹화할 수 있는 Non-Test Elements > HTTP(s) Test Script Recoder를 실행합니다. 필요에 따라 Script Recoder 하위에 View Results Tree 를 추가하여 HTTP 요청과 결과를 확인 합니다.
Target Controller: 위에서 추가한 Once Only Controller로 설정합니다. (녹화 위치에 해당되면 설정해야 함)

*** 다음 3) ~ 4) 작업은 Jmeter 프록시 사용 시 업로드 하고자 하는 이미지 파일의 전체경로 Parameter를 비정상적으로 처리하는 문제 때문에 다소 복잡한 과정으로 작업해야 합니다. WordPress 미디어 업로드의 경우 이미지 파일 위치만 ‘Jmeter 설치폴더\bin\’ 에 있으면 됩니다. ***

3) ‘Jmeter 설치 폴더\bin\’ 아래 업로드할 이미지 파일을 준비합니다.

4) Jmeter를 설치하지 않은 원격지 PC 크롬브라우저에 Falcon Proxy를 플러그인 추가하여 Jmeter 프록시를 경유할 수 있도록 설정 후 위 3)과 동일한 명칭의 이미지 파일을 준비하여 Piwigo에 로그인 후 사진을 업로드 하는 과정을 완료합니다.

5) Once Only Controller에 http 행위가(요청/응답) 기록된 것을 확인 후 Thread Group 에서 Start 를 클릭합니다. ‘You should save your test plan before running it. ~’ 경고창이 뜨면 Yes 클릭 후 Test Plan 시나리오를 적당한 이름으로 저장합니다.

6) Thread Group 하위 View Results Tree 를 클릭하면 정상처리 되지 않은 요청이 빨간색으로 보입니다.
“Invalid security token” 오류로 아마도 Piwigo 가 로그인 시 랜덤하게 전송하는 token 값을 새로운 값으로 보내지 않고 기존 저장된 값으로 전송해 발생한 오류로 보입니다.

7) View Results Tree 에서 Response data탭을 확인하며 http 행위를 위에서 부터 하나씩 token 이라는 값으로 search 합니다. 저의 경우 21번에서(14번에도 있었지만) ’21 /~piwigo/admin.php’ 의 ‘pwg_token=5ca~~~ ‘ 로 찾을 수 있었습니다. (브라우저 캐시 상태와 Jmeter 프록시 사용횟수 등에 따라 번호는 다름)

8) pwg_token 값을 추출하기 위해 21/~piwigo/admin.php 아래 ‘Regular Expression Extractor’ 를 추가 후
Name of created variable(변수명) : pwg_token,
Regular Expression(정규표현식) : pwg_token='(.+?)’,
Template(템플릿) : $1$ ,
Match No(매치번호) : 1,
Default Value(기본값) : 아무값 을 입력합니다.

9) 위 6)에서 오류가 났던 http 행위로 이동하여 Parameters 탭 pwg_token : ${pwg_token} 을 입력합니다.

10) Piwigo 에 사진을 업로드 하는 Jmeter 시나리오가 작성 되었습니다. Thread Group 에서 Start 하면 사진이 업로드 되는것을 확인할 수 있습니다.

5-B. [실습] CSV 파일읽기로 입력값 변경
1) 위 시나리오에서 이미지 업로드 시 2개 이상의 이미지 파일을 업로드 하기위해 CSV Data set Config 를 사용할 수 있습니다. JMeter 위 시나리오의 Thread Group 에서 Config Element > CSV Data Set Config를 추가합니다.

2) ‘Jmeter 설치 폴더/bin/’ 폴더에 01.JPG~05.JPG 파일을 복사 후 다음과 같은 images.csv 파일을 utf-8 인코딩으로 준비합니다.

3) CSV Data Set Config 를 다음과같이 설정합니다.
Filename : 위 2) 파일의 경로와 파일명
File encoding : UTF-8
Variable Names : title,fileName
Delimiter : ,
Allow quoted data : False
Recycle on EOF : True
Stop thread on EOF : False
Sharing mode : All threads
(Once Only Controller 환경에서 Number of Threads 숫자값 변경을 통해 테스트하는 경우 Sharing mode 가 All threads 또는 Current thread group이면 순차적으로 읽어서 적용, Current thread인 경우 첫번째 라인만 적용)

4) 파일을 업로드 하는 http 행위 29/ Parameters탭과 Files Upload탭을 다음과 같이 수정합니다.
Parameters 탭의 name : ${title}
Files Upload 탭의 File Path 값을 ${fileName}

5) Thread Group 의 Number of Threads(users) : 10 정도로 하여 실행하면 이미지 파일이 순차적으로 업로드 됩니다.

6. [실습] LimeSurvey 설문조사 응답하기
* Jmeter를 활용하여 LimeSurvey 설문조사 프로그램에 응답 Test Plan을 작성하는 방법입니다. 이미 위에서 설명했던 내용들은 최소한으로 설명하고 사용하지 않았던 내용에 대해서만 상세 설명합니다.*

1) LimeSurvey 에 한명의 사용자 토큰으로 1,000 번의 설문에 응답할 수 있는 배열(숫자) 형태의 5개 질문이 있는 설문지를 생성합니다. 질문에 대한 객관식 답변은 A1~A5 로 POST 전달됩니다.

2) Jmeter 프로그램 Thread Group에 다음 엘리먼트를 추가합니다.
Config Element > HTTP Header Manager,
Config Element > HTTP Cookie Manager,
Config Element > Random Variable,
Config Element > User Defined Variables,
Post Processor > CSS/JQuery Extractor,
Logic Controller > Once Only Controller,
Listner > View Results Tree

3) LimeSurvey 는 토큰값을 이용해 로그인 후 설문에 응답하는 과정에서 ‘YII_CSRF_TOKEN’ 값(최초 토큰 로그인 시 한번 발행)과 ‘LEMpostKey’ 값(설문 항목마다 변경된 값으로 발행하는 것으로 보임) 을 요구합니다. 이 값들은 CSS/JQuery Extractor 로 추출 변수 저장하여 request 요청 페이지에서 넘겨 줍니다.

4) 설문응답 시 랜덤한 값 입력을 위해 ‘Random Variable’ 와 ‘User Defined Variables 에 ${__chooseRandom()} 함수’ 정의하여 사용합니다. chooseRandom() 등의 함수를 사용하기 위해 jpgc-functions 플러그인이 필요할 수 있습니다.(설치 전 함수가 실행되지 않아 확인 필요)

(Random Variable 값 숫자 1 ~ 5 랜덤하게 선택되어 answer1 변수에 저장)


(${__chooseRandom(A1,A2,A3)} 함수로 랜덤한 값을 answer2 변수에 저장)


(설문에 제출하는 Request 페이지에서 앞서 정의한 변수를 호출하여 설문에 응답. 변수 answer1의 경우 숫자로 앞에 문자열 A를 붙여 A${answer1}형태로 정의)

5) 저마다 환경이 조금씩 다르겠지만 이와 같은 방법으로 작성한 Test Plan 으로 여러명의 사용자의 동시 설문응답 테스트를 할 수 있습니다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

This site uses Akismet to reduce spam. Learn how your comment data is processed.