새소식

반응형
Development

[Test] Artillery - 성능테스트

  • -
반응형

최근에 포스팅을 통해서 성능 테스트의 개념 및 종류를 알아보았으니 이제 실제로 수행해보자.

(https://kkang-joo.tistory.com/180)

 

성능테스트를 실행할만한 다양한 오픈소스 툴이 제공되어지는데

그중에 접근성이 좋고, 설정파일도 yml 형식이라 간단해보이는 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
반응형

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.