새소식

반응형
Development

[Test] Artillery - 성능테스트

  • -
반응형

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

(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
반응형
Contents

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

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