JMeter 개요
- 성능 테스트, 로드 테스트를 위한 오픈소스 SW
- Apache JMeter 공식 : https://jmeter.apache.org/
- Jmeter Plugins : https://jmeter-plugins.org/
설치 및 실행
- Windows 설치
- Binary 파일을 다운로드 후 적당한 위치에 압축해제 : https://jmeter.apache.org/download_jmeter.cgi
- 실행 : \설치경로\bin\jmeter.bat
- Mac 설치
- 플러그인과 함께 설치 : brew install jmeter --with-plugins
- 실행 : open /usr/local/bin/jmeter
플러그인 사용
- JMeter Plugins Manager : https://jmeter-plugins.org/wiki/PluginsManager/
- 설치 : jar 파일을 다운로드하여 Jmeter 설치된 위치의 lib/ext에 복사
- 실행 : Menu > Options > Plugins Manager

성능테스트 예제 : REST API 성능 테스트
- 테스트 계획
- Name : 테스트 계획 이름

- 쓰레드 그룹
- Test Plan > 우클릭 > Add > Thread (Users) > Thread Group
- Name : 테스트할 Group의 이름
- Number of Thread (users) : 테스트할 thread 수 (사용자 수)
- Ramp-Up Period (in seconds) : Thread당 시작될 대기시간 (Thread수가 20개, Ramp-Up이 100초이면, 5(100/20)초마다 Thread가 하나씩 시작함 )
- Loop Count : 반복 횟수, forever를 체크시 무한히 반복하며 Scheduler과 체크시 시간 조건을 사용 가능


- 샘플러 #1
- Thread Group > 우클릭 > Add > Sampler > HTTP Request
- WebServer : Protocol은 http가 기본, Port 생략시 기본포트(80)
- HTTP Request : 서버로 요청할 정보


- 샘플러 #2
- 요청할 정보를 csv파일에서 가져오기 위해서 Config Element 추가
- Sampler(HTTP Request) > 우클릭 > Add > Config Element > CSV Data Set Config
- ${memberId}는 csv에서 동적으로 가져오며, Name / Path 에서 사용가능



- 리스너
- 리스너용 plugin 추가 : Menu > Options > Plugins Manager > Avaliable Plugins 탭 > 3 Basic Graphs 추가
- Thread Group > 우클릭 > Add > Listener >
- View Results Tree
- Summary Report
- Aggregate Graph
- jp@gc - Active Threads Over Time
- jp@gc - Response Times Over Time
- jp@gc - Transactions per Second

- 후처리 #1
- 응답결과가 Json 포멧일때 pretty하게 표현하기 위해 후처리
- plugin 추가 : JSON/YAML Plugins
- Thread Group > 우클릭 > Add > Post Processors > JSON Format Post Processor

- 후처리 #2
- JSON Format Post Processor 적용시 한글이 깨지는 문제가 발생함
- JSR223 PostProcessor 적용하여 encoding 변경 가능
- Thread Group > 우클릭 > Add > Post Processors > JSR223 PostProcessor
- prev.setResponseData(new String(prev.getResponseData()), 'UTF-8')


- 실행
- Thread Group 또는 Sampler 선택 > Clear All (모든 로그 삭제) > Start 버튼 클릭

- 업무용 샘플
- Sampler(HTTP Request)를 여러개 등록하고, PostProcessor와 Listener는 공통으로 사용하고, 테스트하지 않을 Sampler는 Disable






