Development
[Test] Artillery - 성능테스트
joo_k
2025. 3. 25. 23:50
반응형
최근에 포스팅을 통해서 성능 테스트의 개념 및 종류를 알아보았으니 이제 실제로 수행해보자.
(https://kkang-joo.tistory.com/180)
성능테스트를 실행할만한 다양한 오픈소스 툴이 제공되어지는데
그중에 접근성이 좋고, 설정파일도 yml 형식이라 간단해보이는 Artillery를 선택하게 되었다.
Artillery의 특징 및 사용 방법을 알아가보자.
Artillery
Artillery는 성능 테스트 및 부하 테스트를 위한 오픈소스 툴
Node.js 기반에서 실행
API, 웹 애플리케이션, 서버의 성능을 검증하는 데 유용하며, 특히 HTTP, WebSocket, GraphQL, Socket.io, Kinesis 등의 프로토콜을 지원
-> Artillery는 가볍고 설정이 간편한 성능 테스트 툴로, YAML 기반의 설정 파일을 활용하여 다양한 시나리오를 쉽게 정의할 수 있는게 특징이다.
실행
docker를 활용하여 실행
docker image 제공 : artilleryio/artillery:latest
docker run --rm -it -v /home/scripts \
artilleryio/artillery:latest \
run /scripts/test_script.yaml
설정파일
위에 실행 명령어를 보면 알수있듯이 어떠한 동작을 수행해달라고 요청하는 스크립트가 필요하다.
config:
# This is a test server run by team Artillery
# It's designed to be highly scalable
target: http://asciiart.artillery.io:8080
phases:
- duration: 60 # 테스트 진행 시간 60초
arrivalRate: 1 # 첫 가상유저수 1명
rampTo: 5 # 위의 duration 동안 첫 가상유저수부터 해당 값까지 차츰 증가
name: Warm up phase
- duration: 60
arrivalRate: 5
rampTo: 10
name: Ramp up load
- duration: 30
arrivalRate: 10
rampTo: 30
name: Spike phase
# Load & configure a couple of useful plugins
# https://docs.art/reference/extensions
plugins:
ensure: {}
apdex: {}
metrics-by-endpoint: {}
apdex:
threshold: 100
ensure:
thresholds:
- http.response_time.p99: 100
- http.response_time.p95: 75
scenarios:
- flow:
- loop:
- get:
url: '/dino'
- think: 0.5
- get:
url: '/pony'
- get:
url: '/armadillo'
count: 100
config와 scenarios 두 부분으로 구성
- config는 로드 테스트 실행 방법(예: 테스트 중인 시스템의 URL, 생성되는 부하량, 사용할 플러그인 등)을 정의하는 부분
- 위의 단계는 일반적으로 "스파이크 테스트"라 불린다
- API의 부하가 짧은 시간 동안 높은 수준으로 급증
- scenarios는 Artillery에서 생성한 가상 사용자가 수행할 작업을 정의하는 곳
- 위의 시나리오는 3개의 get 요청을 루프 100번 돌며 수행
아래와 같은 형태로 결과가 나온다.
Test run id: tjjxc_6wygzrj3wwwn4cf_dbnt
Phase started: Warm up the API (index: 0, duration: 60s) 13:00:00(+0100)
--------------------------------------
Metrics for period to: 13:00:10(+0100) (width: 9.9s)
--------------------------------------
http.codes.200: ................................................................ 2100
http.downloaded_bytes: ......................................................... 1407350
http.request_rate: ............................................................. 200/sec
http.requests: ................................................................. 30
http.response_time:
min: ......................................................................... 13
max: ......................................................................... 15
mean: ........................................................................ 14.1
median: ...................................................................... 13.9
p95: ......................................................................... 13.9
p99: ......................................................................... 13.9
http.responses: ................................................................ 210
vusers.completed: .............................................................. 700
vusers.created: ................................................................ 700
vusers.created_by_name.0: ...................................................... 700
vusers.failed: ................................................................. 0
vusers.session_length:
min: ......................................................................... 177
max: ......................................................................... 177
mean: ........................................................................ 176.9
median: ...................................................................... 175.9
p95: ......................................................................... 175.9
p99: ......................................................................... 175.9
반응형