이전에 적었던 글에서는 JMeter를 사용해 부하테스트를 진행해보았는데 요즘에는 nGrinder를 많이 사용한다고 한다.
The Grinder
라는 오픈소스 기반으로 네이버
에서 개발 한 오픈소스 프로젝트다.
스크립트를 작성함에 있어 Jython
과 Groovy
두 가지 중 선택할 수 있다.
Groovy
의 경우 JUnit
기반으로 되어 있어, 테스트 스크립트를 nGrinder
내에서 실행하기 전에, IDE
에서 먼저 확인해보고 디버깅할 수 있다. 또한 스크립트를 수정할 수 있으므로 세밀한 성능 테스트가 가능하다.
계정 관리 기능이 존재하여 계정별 테스트 스케줄 및 이력 기능을 제공한다.
Apache
에서 개발한 순수 JAVA
로 개발된 성능 테스팅 도구이다.
Web Application
을 테스팅하기 위해 디자인 되었지만, 플러그인을 이용하여 다른 기능도 테스트할 수 있도록 확장 할 수 있다.
Jenkins
와 연동을 지원한다.XML
형식으로 작성 할 수 있다.Load Test
, Distributed Test
, Functional Test
등을 지원한다.load(부하)
를 생성할 수 있다.HTTP, JDBC, LDAP, SOAP, JMS 및 FTP
와 같은 다양한 프로토콜도 지원한다.Bean Shell & Selenium
을 이용하여 자동화 테스트를 수행 할 수 있다.Swing
기반의 Component
를 지원하기 때문에 GUI
가 이쁘지 않다. (중요)마지막 이유 때문에 nGrinder를 사용해보게 된 계기이기도 하다.
JMeter 사용법은 이전에 적었던 JMeter 글에 있다.
nGrinder 공식 GitHub: https://github.com/naver/ngrinder/wiki/Installation-Guide
nGrinder는 자체 실행 가능한 WAR 파일로 배포되어 WAR 파일을 다운받아 WAR 파일을 구동시킬 수 있다. 또 다른 방법으로는 도커
를 이용한 방법이다.
난 도커
를 이용해서 nGrinder를 사용했다.
로컬에서 nGrinder를 사용해보려고 했지만 로컬 PC 환경이 Mac M1이라 도커
를 이용하거나 WAR
파일로 실행하려 했을 때 --platform=linux/arm64
가 아직 지원이 안 된 건지, 내가 못 한 건지 모르겠지만 정상적으로 되지 않았다.
그래서 컨트롤러용, 에이전트용 EC2(Ubuntu 18.04 LTS)
를 새로 생성해서 진행했다.
nGrinder Controller, Agent, 테스트할 서버를 각각 구축하는 것이 좋다. 만약 세 가지 요소들을 하나의 서버로 구동한다면 서버가 온전히 성능 테스트만을 위해 자원을 사용할 수 없게 된다. 따라서 정확한 수치를 산출해내기 어렵다.
참고: https://junghyungil.tistory.com/176
일단 새로 생성한 EC2에 도커를 설치한다.
sudo apt-get update
sudo apt-get -y install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get install -y docker-ce
sudo usermod -aG docker $USER
Controller
이미지를 pull
하고 run
한다.latest
가 자동으로 붙어 최신 버전을 pull
받는다.)# pull
docker pull ngrinder/controller
# run
docker run -d -v ~/ngrinder-controller:/opt/ngrinder-controller -p 80:80 -p 16001:16001 -p 12000-12009:12000-12009 ngrinder/controller
그리고 EC2 보안그룹 인바운드에 위의 포트들을 추가해야 한다.
Agent
이미지를 pull
하고 run
한다.# pull
docker pull ngrinder/agent
# run
docker run -v ~/ngrinder-agent:/opt/ngrinder-agent -d ngrinder/agent {컨트롤러 ip}:{컨트롤러 Host 포트}
컨트롤러 ip
에는 EC2 퍼블릭 ip
를 넣으면 되고 컨트롤러 포트
는 Controller
이미지를 실행시킬 때 80
:80에서 80포트로 설정했기 때문에 80을 넣으면 된다.
두 가지가 실행이 되었으면 웹 브라우저에서 EC2 퍼블릭 ip 주소:80
에 접속하면
위 사진이 뜬다.
오늘 기준 latest 버전:
nGrinder v3.5.5-p1
기본 아이디와 패스워드는 admin/admin
이다.
로그인 하고 비밀번호를 바꿔주자.
에이전트를 확인하기 위해 에이전트 관리
로 간다.
위에 있는 admin을 누르면 리스트가 나온다.
위 사진처럼 에이전트가 보이면 성공이다 !
사용방법은 다음에 계속...
직접 사용해보며 사용 방법을 적으려 했으나
agent is about to die due to lack of free memory.
라는 오류 메세지와 함께 agent 서버가 죽는다.
agent 서버가 프리티어로 사용하는 EC2 인스턴스 유형이 t2.micro
인데 성능이 낮아서 그런가..?