artillery 라이브러리를 이용한 node 서버 부하 테스트

npmTest

1. 주요 설정

target

요청을 보낼 서버 주소를 지정

phases

부하 패턴을 정의

phases:
  - duration: 20
    arrivalRate: 5
    name: 'Warm up'
  - duration: 60
    arrivalRate: 15
    name: 'Sustained load'

첫 번째 단계는 서버 워밍업, 두 번째 단계에서 실제 성능을 측정한다.

ensure

성능 합격 기준을 설정

ensure:
  p95: 800
  p99: 1500
  maxErrorRate: 1

think

요청 사이에 대기 시간

- think: 1  # 1초 대기

2. 성능 지표 해석

실무 기준

3. 실행 방법

package.json 스크립트 설정

"scripts": {
  "perf": "artillery run",
  "perf:report": "artillery report"
}

실행 명령어

npm run perf -- tests/artillery/scenarios/login.yml

4. 예제

테스트 데이터 (tests/artillery/data/users.csv)

email,password
buyer1@test.com,test1234
buyer2@test.com,test1234
buyer3@test.com,test1234
seller1@test.com,test1234
seller2@test.com,test1234

시나리오 파일 (tests/artillery/scenarios/login.yml)

config:
  target: '{{ $processEnvironment.TARGET_URL }}'
  phases:
    - duration: 30
      arrivalRate: 5
      name: 'Warm up'
    - duration: 60
      arrivalRate: 15
      name: 'Sustained load'
 
  defaults:
    headers:
      Content-Type: 'application/json'
 
  payload:
    path: '../data/users.csv'
    fields:
      - 'email'
      - 'password'
    skipHeader: true
 
  ensure:
    p95: 800
    p99: 1500
    maxErrorRate: 1
 
scenarios:
  - name: 'Login'
    flow:
      - post:
          url: '/api/auth/login'
          json:
            email: '{{ email }}'
            password: '{{ password }}'
          expect:
            - statusCode: 200
            - hasProperty: 'accessToken'
      - think: 1

5. 결과 확인

© bgkRSS