# asciiart-load-test.yaml
config:
# This is a test server run by team Artillery
# It's designed to be highly scalable
target: http://localhost:3000
phases:
- duration: 60
arrivalRate: 1
rampTo: 5
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
processor: './dist/create-dummy-one.js' # JavaScript 파일 지정
scenarios:
- name: 'GET request team players'
flow:
- get:
url: 'http://localhost:3000/team/players' # 타겟 설정
# 로컬 설치시: ./node_modules/.bin/artillery run ./asciiart-load-test.yaml
# 전역 설치시: artillery run asciiart-load-test.yaml
# 로컬 설치시: ./node_modules/.bin/artillery run --output report.json ./asciiart-load-test.yaml
# 전력 설치시: artillery run --output report.json asciiart-load-test.yaml
"Target URL"은 부하 테스트를 실행할 때 기본적으로 요청을 보낼 서버의 주소를 나타냅니다. 이는 테스트 대상인 웹 서버나 API 서버의 루트 주소일 수 있으며, 모든 테스트 요청의 기본적인 출발점 역할을 합니다. 예를 들면, 만약 당신이 http://example.com
에 대한 부하 테스트를 계획한다면, 이 주소가 "Target URL"이 됩니다.
https://www.artillery.io/docs/get-started/first-test
반면, "시나리오 URL"은 특정 테스트 시나리오 내에서 요청을 보낼 구체적인 경로나 엔드포인트를 지정합니다. 여러분이 테스트를 설계할 때, 다양한 사용자 행동을 시뮬레이션하기 위해 여러 다른 경로나 엔드포인트에 요청을 보낼 수 있습니다. 예를 들어, 로그인 페이지, 제품 목록 페이지, 사용자 프로필 페이지 등이 있을 수 있습니다. 이러한 각각의 경로나 엔드포인트가 "시나리오 URL"입니다.
http://example.com
http://example.com/login
http://example.com/products
http://example.com/profile
부하 테스트를 계획하고 실행할 때, "Target URL"을 설정하여 테스트의 기본 서버 주소를 지정하고, 그 다음에 여러 "시나리오 URL"을 통해 구체적인 테스트 경로를 설정합니다. 이를 통해 실제 사용자가 웹사이트나 애플리케이션을 사용할 때 발생할 수 있는 다양한 행동을 모방할 수 있습니다.
--------------------------------------
Metrics for period to: 16:29:00(+0900) (width: 4.072s)
--------------------------------------
apdex.frustrated: .............................................................. 0
apdex.satisfied: ............................................................... 4
apdex.tolerated: ............................................................... 1
http.codes.200: ................................................................ 5
http.downloaded_bytes: ......................................................... 9395
http.request_rate: ............................................................. 1/sec
http.requests: ................................................................. 5
http.response_time:
min: ......................................................................... 62
max: ......................................................................... 167
mean: ........................................................................ 85.6
median: ...................................................................... 66
p95: ......................................................................... 67.4
p99: ......................................................................... 67.4
http.responses: ................................................................ 5
plugins.metrics-by-endpoint./team/players.codes.200: ........................... 5
plugins.metrics-by-endpoint.response_time./team/players:
min: ......................................................................... 62
max: ......................................................................... 167
mean: ........................................................................ 85.6
median: ...................................................................... 66
p95: ......................................................................... 67.4
p99: ......................................................................... 67.4
vusers.completed: .............................................................. 5
vusers.created: ................................................................ 5
vusers.created_by_name.GET request team players: ............................... 5
vusers.failed: ................................................................. 0
vusers.session_length:
min: ......................................................................... 68.2
max: ......................................................................... 190
mean: ........................................................................ 94.8
median: ...................................................................... 71.5
p95: ......................................................................... 74.4
p99: ......................................................................... 74.4
각 항목의 의미와 성능을 평가하는 방법
https://techblog.tabling.co.kr/artillery%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%B6%80%ED%95%98-%ED%85%8C%EC%8A%A4%ED%8A%B8-9d1f6bb2c2f5
/team/players
)에 대한 성공적인 응답의 수와 응답 시간에 대한 통계를 제공합니다. 이는 해당 엔드포인트의 성능을 평가하는 데 사용될 수 있습니다.faker
라이브러리를 사용하여 더미 데이터를 생성하는 것은 부하 테스트를 진행하기 전에 선택적인 단계입니다. Artillery
와 같은 부하 테스트 도구를 사용할 때 더미 데이터를 사전에 생성하는 것이 필요한지 여부는 테스트의 목적과 환경에 따라 달라집니다.
페이즈 별로 가상 사용자수(VUs)가 점차 증가하게 되는데, 이때 실제 데이터가 없는 경우, 가상 사용자가 수행할 수 있는 작업이 제한됩니다. 부하 테스트의 목적 중 하나는 실제 운영 환경에서의 시스템 성능과 안정성을 평가하는 것이므로, 실제와 유사한 데이터 환경을 구성하는 것이 중요합니다. 가상 사용자들이 실제 사용자의 행동을 모방하여 시스템에 요청을 보내는 것이 부하 테스트의 기본적인 메커니즘입니다. 이러한 요청은 데이터베이스 조회, 데이터 생성, 데이터 수정 등 다양한 형태가 될 수 있습니다.
예를 들어, 웹 애플리케이션에 대한 부하 테스트를 수행한다고 가정해 봅시다. 해당 애플리케이션에 로그인 기능, 게시물 조회, 게시물 작성 기능이 있다면, 이러한 기능을 테스트하기 위해서는 사용자 계정 정보, 게시물 데이터 등이 필요합니다. 만약 이 데이터가 없다면, 가상 사용자는 로그인을 시도할 수 없고, 게시물을 조회하거나 작성하는 행동을 수행할 수 없습니다.
실제 데이터가 없는 상황에서는 다음과 같은 문제가 발생할 수 있습니다:
따라서, 부하 테스트를 위해 더미 데이터를 생성하고 사용하는 것은, 실제 데이터가 없는 상황에서도 가상 사용자가 의미 있는 작업을 수행할 수 있도록 하여, 실제와 유사한 테스트 환경을 구축하는 데 매우 중요합니다. 이를 통해 보다 정확하고 유의미한 테스트 결과를 얻을 수 있습니다.
실제와 유사한 테스트 환경: 실제 운영 환경과 유사한 데이터로 테스트를 진행하고자 할 때, faker
를 사용하여 다양한 유형의 데이터를 생성하면 실제와 유사한 환경에서의 서비스 성능을 더 정확하게 측정할 수 있습니다.
데이터 의존성: 테스트하려는 시스템이 특정 형태의 데이터를 필요로 하며, 이 데이터가 사전에 준비되어 있지 않은 경우 (예: 사용자 프로필, 상품 정보 등) 더미 데이터를 생성해야 합니다.
데이터 베이스 스트레스 테스트: 데이터베이스에 대한 부하 테스트를 진행하고자 할 때, 충분한 양의 데이터가 필요할 수 있습니다. 이 경우 faker
를 사용하여 대량의 테스트 데이터를 생성하고 데이터베이스에 삽입할 수 있습니다.
단순한 부하 테스트: 단순히 시스템이나 애플리케이션의 동시 접속자 수나 트래픽 양을 테스트하는 경우, 실제 데이터의 복잡성이 중요하지 않을 수 있습니다.
기존 데이터 사용: 테스트 환경에 이미 충분한 양의 데이터가 존재하고 이를 재사용할 수 있는 경우, 추가로 더미 데이터를 생성할 필요가 없습니다.
결론적으로, faker
를 사용하여 더미 데이터를 생성할지 여부는 테스트의 목적, 필요한 데이터의 종류, 테스트 환경의 현재 상태에 따라 결정되어야 합니다. 테스트 계획을 세울 때 이러한 요소들을 고려하여 결정하는 것이 좋습니다.