본문 바로가기
TIL

TIL 240814 - Artillery 를 이용한 부하테스트

by lemonpie611 2024. 8. 14.

1. config 설정

config:
  target: 'http://localhost:3001/api'
  phases:
    - duration: 5 // 총 5초동안
      arrivalRate: 1 // 1초에 1개의 데이터를 처리함
      name: 'Warm up'
  defaults:
    headers:
      User-Agent: 'Artillery'

 

2. payload - csv 파일 불러오기

  payload:
    path: './data.csv'
    fields:
      - 'email'
      - 'password'
    loadAll: false
    order: sequence

 

여기서 loadAll: false, order: sequence를 해야 모든 데이터를 하나씩 불러올 수 있게 된다.

loadAll: true를 해도 작동은 하지만, 하나의 데이터만 지정해서 처리하는 것만 가능함.

 

3. scenario 작성

scenarios:
  - name: "Search and buy"
    flow:
      - log: "로그인 시도: 이메일 {{ email }} 비밀번호 {{ password }}"
      - post:
          url: '/v1/auth/sign-in'
          json:
            email: "{{email}}"
            password: "{{password}}"
          capture:
            - json: "$.data.accessToken"
              as: "accessToken"

 

중간에 log를 사용해서 로그를 찍을 수 있음

json: 실제 테스트에서 body에 넣을 값

headers: 실제 테스트에서 헤더에 토큰으로 넣을 값

capture: 테스트에서 res로 받아온 값을 as로 지정한 변수에 넣어서 다음 동작에 사용할 수 있도록 함, 아래 코드 참고

scenarios:
  - name: "Search and buy"
    flow:
      - log: "로그인 시도: 이메일 {{ email }} 비밀번호 {{ password }}"
      - post:
          url: '/v1/auth/sign-in'
          json:
            email: "{{email}}"
            password: "{{password}}"
          capture:
            - json: "$.data.accessToken"
              as: "accessToken"
      - get: 
          url: '/v1/users/me'
          headers:
            authorization: "Bearer {{accessToken}}"
      - log: "--{{user}}--"

 

로그인 후 accessToken으로 받아온 값을 get의 headers에 Bearer 토큰으로 넣어주어 내 정보 조회 테스트까지 진행함

 

전체코드

config:
  target: 'http://localhost:3001/api'
  phases:
    - duration: 5
      arrivalRate: 1
      name: 'Warm up'
  defaults:
    headers:
      User-Agent: 'Artillery'
  payload:
    path: './data.csv'
    fields:
      - 'email'
      - 'password'
    loadAll: false
    order: sequence

scenarios:
  - name: "Search and buy"
    flow:
      - log: "로그인 시도: 이메일 {{ email }} 비밀번호 {{ password }}"
      - post:
          url: '/v1/auth/sign-in'
          json:
            email: "{{email}}"
            password: "{{password}}"
          capture:
            - json: "$.data.accessToken"
              as: "accessToken"
      - get: 
          url: '/v1/users/me'
          headers:
            authorization: "Bearer {{accessToken}}"
      - log: "--{{user}}--"