본문 바로가기
IT/개발환경

JMeter 분산 테스팅환경 만들기(1/2) - 기본구축

by rapker 2023. 4. 18.
반응형
내용 미리보기
 
  1. JMeter 설치
  2. JMeter 간략한 Test Plan 구성
 
master(client)는 windows 머신, slave(server) 들은 리눅스 머신으로 사용 합니다.
 

사전준비

 
참조
시작하기 전에 몇가지 확인 해야할 사항이 있습니다.
 
  • 모든 머신(마스터 및 슬레이브)에서 동일한 JMeter버전을 사용해야 합니다.
  • 마스터와 슬레이브가 동일한 서브넷에 있어야 합니다.
  • 운영체제의 방화벽을 끄거나 테스트에 사용되는 포트를 활성화 해야 합니다.
  • 모든 슬레이브에 테스트 스크립트에서 사용될 플러그인을 설치해야 합니다.
 
728x90
 

Windows(Master)에 JDK 설치

 
JMeter Master로 사용할 Windows 가상머신을 준비하고 JDK를 설치 합니다.
 
JDK 설치 - JMeter 5.2.1 버전에서는 JDK 8이상을 요구, 안정적으로 JDK 8버전을 설치 합니다.
  • JDK 8 download 검색후 아래와 같이 다운로드 합니다.
 

환경변수 등록

  • JDK-xxx 경로를 Path에 등록하고
  • JDK-xxx/bin 경로를 시스템 환경변수 JAVA_HOME으로 등록해 줍니다.
 
 
환경변수와 경로 설정을 마치면 windows를 리부팅 한번 해줍니다.
 
 
 

Windows(Master)에 JMeter 설치

 
Apache JMeter 링크에서 JMeter를 다운로드 받습니다.
            
 
다운로드 받은 zip 파일을 압축을 풀어 줍니다. (저는 편의상 c:\에 압축을 풀었습니다.)
 
 
 
 

JMeter Plugin Manager 설치

 
                
 
컴퓨터를 손상시킬 수 있다고 겁을 주지만
 
무시하고 다운로드 받습니다.
 
 
다운로드 받은 Plugin 설치를 위해 jar파일을 이동 시켜 줍니다.
  •                 
 
 

JMeter 환경변수 추가

 
  • JMeter 폴더 경로를 JMETER_HOME 시스템 환경 변수로 설정하고
  • JMeter/bin폴더 경로를 PATH환경 변수로 설정해야 합니다.
 
 
 
 
환경변수 등록 후 Windows를 재 시작 해 줍니다.
 
 
 
 

JMeter 실행

 
apache-jmeter-5.4.1/bin/jmeter.bat 파일로 실행하여 정상적으로 JMeter실행 되는지 확인 합니다.
 
 
 
정상적으로 JMeter가 실행 되었습니다.
 
 
 
반응형
 
 

JMeter Slave 설정

 
이제 slave로 사용될 linux 가상머신을 준비하고 JMeter를 설치 합니다.
 
OpenJDK 설치
sudo apt-get update
sudo apt-get install -y openjdk-8-jdk
 
JMeter 설치
 
tar -zxf apache-jmeter-5.4.1.tgz
 
 
 

host 파일에 JMeter-Master IP 추가

sudo vi /etc/hosts
  • vi 커맨드
  • 수정 전 원본
  • 수정 후
 
 

마스터로 ping체크

ping master
 
Slave(Linux)에서 Master(Windows)로 핑이 안나간다면 ICMP에 대한 NSG 규칙과 guest os의 방화벽을 확인합니다.
 
Windows 방화벽에 ICMP 허용 (with powershell)
netsh advfirewall firewall add rule name="ICMP Allow incoming V4 echo request" dir=in action=allow enable=yes protocol=icmpv4:8,any
 
 
 
 

SSL 통신을 위한 설정

 
JMeter 4.0부터 RMI의 기본프로토콜은 SSL 입니다.
 
SSL을 사용하지 않도록 변경할 수 있습니다.
 
SSL 비활성화 한다면 아래쪽 RMI 키스토어 생성 부분은 스킵해도 괜찮습니다.
 
 
 

SSL 비활성화

 
SSL 비활성화 하려면 Master, Slave 모두 SSL 비활성화 설정으로 변경해 주어야 합니다.
 
master에서 SSL 비활성화
  • apache-jmeter-5.4.1/bin/jmeter.properties  파일을 열고
 
  • server.rmi.ssl.disable 값을 true로 변경합니다.
 
 

 

 
 
sudo vi jmeter.properties
 
jmeter가 설치된 경로에서 vi편집기로 jmeter.properties파일을 오픈합니다.
 
vi 편집기에서 ssl.disable 검색하여 값을 false에서 true로 변경합니다.
 
 
 
 

RMI (Remote Method Invocation) 키스토어 생성

 
SSL 비활성화 했다면 RMI 키스토어 생성 부분은 스킵해도 괜찮습니다.
 
JMeter-Master Server에서
apache-jmeter-5.4.1/bin/ 으로 이동하여 create-rmi-keystore.bat 파일을 실행합니다. (Unix계열은 create-rmi-keystore.sh)
 
            
 
파일을 실행하면 rmi 키스토어의 정보를 입력합니다.
  • 하지만 솔직하게 작성할 필요는 없잖아요?
  • 아래처럼 답변을 해 줍니다. 비밀번호를 입력하지 않고 엔터키를 누르면 user.properties파일에서 RMI 구성을 변경하지 않아도 됩니다.
  • 생성된 rmi_keystore.jks
  • rmi_keystore.jks 파일을 슬레이브의 jmeter/bin 경로에 복사 합니다.
 
 
 
 
 
 
 

JMeter 방화벽 설정

 
slave로 사용되는 guest os 자체에 방화벽을 꺼놨다면 jmeter의 port 설정은 스킵해도 됩니다.
jmeter 설정에서 열어주는 port들은 VM에 inboud 될 수 있도록 플랫폼 단에서도 열어주어야 합니다.
 
 

Slave 설정

 
참조
 
SSL 비활성화 했거나 기본포트로 사용한다면 Slave 설정은 스킵해도 됩니다.
바로 Master 설정으로 넘어가 주세요
 
정적포트 설정
  • 기본적으로 RMI는 JMeter 서버 엔진에 동적 포트를 사용합니다.
  • JMeter 슬레이브에서 jmeter 마스터 스크립트를 시작할 때 마다 다른 포트에서 들어오는 연결을 허용해야 하는 경우 방화벽에 문제가 발생할 수 있습니다.
  • 임의의 포트를 사용하지 않으려면 jmeter.properties 파일에서 server.rmi.localport 특성을 편집하여 사용할 포트의 특정 값을 설정하거나 행의 주석을 해제해야 합니다.
 
vi 편집기로 jmeter.properties 파일 열기
cd apache-jmeter-5.4.1/
sudo vi jmeter.properties
 
 
vi 편집기에서 server.rmi.localport를 검색하여 주석을 제거 합니다.
 
 
JMeter RMI는 기본적으로 1099 포트를 통해 서버(Slave) / 클라이언트(Master) 통신을 합니다.
변경을 원하는 경우 jmeter.properties 파일의 server.rmi.port 속성의 주석을 제거하고 방화벽 규칙에 추가하면 됩니다.
 
vi편집기에서 server.rmi.port를 검색하여 주석을 제거 합니다.
 
 
마스터에서 들어올 포트 열기
  • 닫혀있는 1099, 4000 포트 상태 확인
  • 1099, 4000 포트 열기
  • 허용된 1099, 4000 포트 확인
 
 
 

Master 설정

 
 
  • jmeter.properties 파일을 열어서
  • Master 에서 연결할 Slave 들의 IP주소(포트없이)만 입력하면 됩니다.
  • 슬레이브 들에 기본포트(1099)를 사용하지 않았다면 IP:Port 형식으로 입력할 수 있습니다. 
 
 
 
 

슬레이브와 마스터 동작하는지 체크

 
JMeter 분산 테스팅 구축과정이 크게 두가지 로 나눌 수 있는데요
  1. JMeter 클러스터 환경 구축
  2. 시나리오 작성
 
지금까지의 설정이 딱 절반정도 진행이 된 상태 입니다.
 
아직 시나리오 설정은 하지 않은 상태이고 지금까지 열심히 설정한 마스터/슬레이브 연결에 이상이 없는지만 확인해 봅니다.
 
 
슬레이브에서 서버 실행
./jmeter-server
 
정상적인 마스터 대기 상태
  • SSL 비활성화로 대기
  • SSL 활성화 상태로 대기
 
 
마스터에서 클라이언트 실행
 
 
JMeter 클라이언트가 실행된 모습
 
테스트 시작 (뭐 설정한게 없어서 테스트 거리는 없지만 통신확인 용으로)
 
Remote Start All 클릭하면 그 뒤에 뭐라뭐라 하면서 팝업이 뜨는데 시나리오가 없다는 내용이니 그냥 무시하고 진행 합니다.
 
응? 뭐지? 아무반응도 없네? 뭔가 잘못 되었나?
 
아니에요!! 슬레이브 확인 해볼까요?
  • SSL 비활성화 했을 때 결과
  • SSL 활성화 했을 때 결과
 
테스트 할 시나리오가 없어서 그렇지 이미 테스트는 시작과 종료가 정상적으로 이뤄졌습니다.
 
 
 
 

테스트 플랜 설정

 
 
  1. Test Group : 테스트 플랜의 시작점으로 Test Group 아래에 모든 컨트롤러와 샘플러가 위치
  2. Sampler : JMeter가 대상 시스템에 요청해야 하는 정보를 설정, 프로토콜에 맞는 설정값들 정의
  3. Logical Controllers : JMeter가 언제 서버에 요청을 전달할지 결정, 예) 로그인은 한번만 한다, A Sampler실행 후 B Sampler 실행
  4. Listener : JMeter를 통해 테스트하는 결과 정보 및 진행 상태 정보 표시. 수집된 정보는 XML, CSV로 저장이 가능
  5. Timers : Sampler들 사이에 간격을 둘 때 사용
  6. Assertion : HTTP규약에 따라 요청 결과값이 200이면 성공, 그 외값은 실패로 간주하는데 예외적으로 결과값을 200으로 받더라도 응답정보에 특정한 메세지를 필터링해서 성공/실패 여부를 판단
  7. Configuration Elements : 수많은 Sampler에서 공통적으로 사용되는 부분을 설정해두는 변수
  8. Pre-Processor Elements : Sampler가 실행되기전에 수행해야 할 내용 정의
  9. Post-Processor Elements : Sampler가 실행되고 난 후 수행해야 할 내용 정의
 
JMeter 실행 시 우선순위에 의해 위 항목들이 동작합니다.
    Configuration > Pre-Processor > Timer > Sampler > Post-Processor > Assertions > Listener
 
Thread Group 추가
            
  •  
 
Http Request Default 추가 - api마다 동일한값 쓰는게 별로 없을것 같은데.....?????????
 
HttpRequest 추가
 
 
 
 
 

테스트 결과 확인

 
테스트를 실행하기 전에 테스트 결과를 확인할 수 있는 Listener 컴포넌트를 몇개 붙이도록 하겠습니다.
 
Listener - View Result Tree 추가
  • 각 Request 호출마다의 결과값을 확인할 수 있는 컴포넌트
 
Listener - Graph Results 추가
  • 전체 테스트의 수치값을 그래프로 확인할 수 있는 컴포넌트
 
Listener - Summary Report
  • 각 항목들을 수치로 확인할 수 있는 컴포넌트
 
 
 
 

테스트 실행

 
            
 
테스트는 아래 두가지로 실행할 수 있는데요
  • Start - 단독 실행
  • Remote Start All - 클러스터링 되어 있는 서버들에게 테스트 플랜 전송
 
지금까지 설정한 내용은 부하테스트를 목적으로 클러스터링 구성을 했기 때문에 모든 서버(JMeter-Slave)들에게 테스트를 요청하고 결과만 받아오도록 Remote Start All을 선택합니다.
 
 
반응형
LIST