TIL | [부하 테스트] 테스트 지표와 더미 데이터의 역할

bubblegum·2024년 4월 5일
0

Today I learn(TIL)

목록 보기
51/84
post-thumbnail

부하 테스트 스크립트 예시와 지표의 의미

# 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

"Target URL"은 부하 테스트를 실행할 때 기본적으로 요청을 보낼 서버의 주소를 나타냅니다. 이는 테스트 대상인 웹 서버나 API 서버의 루트 주소일 수 있으며, 모든 테스트 요청의 기본적인 출발점 역할을 합니다. 예를 들면, 만약 당신이 http://example.com에 대한 부하 테스트를 계획한다면, 이 주소가 "Target URL"이 됩니다.

시나리오 URL

https://www.artillery.io/docs/get-started/first-test

반면, "시나리오 URL"은 특정 테스트 시나리오 내에서 요청을 보낼 구체적인 경로나 엔드포인트를 지정합니다. 여러분이 테스트를 설계할 때, 다양한 사용자 행동을 시뮬레이션하기 위해 여러 다른 경로나 엔드포인트에 요청을 보낼 수 있습니다. 예를 들어, 로그인 페이지, 제품 목록 페이지, 사용자 프로필 페이지 등이 있을 수 있습니다. 이러한 각각의 경로나 엔드포인트가 "시나리오 URL"입니다.

예시

  • Target URL: http://example.com
  • 시나리오 URL:
    • 로그인: 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

HTTP 응답 코드

  • http.codes.200: 성공적인 요청의 수입니다. 총 5번의 성공적인 요청이 있었습니다.

HTTP 트래픽

  • http.downloaded_bytes: 전체 테스트 동안 다운로드된 바이트 수입니다. 총 9395바이트가 다운로드되었습니다.
  • http.request_rate: 초당 요청 비율입니다. 평균적으로 1초에 1번의 요청이 있었습니다.
  • http.requests: 전체 요청 수입니다. 총 5번의 요청이 있었습니다.

HTTP 응답 시간

  • min(최소 응답 시간): 62ms,
  • max(최대 응답 시간): 167ms,
  • mean(평균): 85.6ms,
  • median(중앙값): 66ms,
  • p95(95번째 백분위수): 67.4ms,
  • p99(99번째 백분위수): 67.4ms

가상 사용자(VUsers)

  • vusers.completed: 테스트를 완료한 가상 사용자의 수입니다. 총 5명입니다.
  • vusers.created: 생성된 가상 사용자의 수입니다. 총 5명입니다.
  • vusers.failed: 실패한 가상 사용자의 수입니다. 여기서는 0입니다.

세션 길이

  • 세션 길이에 대한 다양한 통계입니다. 최소 세션 길이는 68.2초, 최대는 190초, 평균은 94.8초, 중앙값은 71.5초, p95와 p99는 각각 74.4초입니다.

플러그인별 지표

Apdex

  • apdex.frustrated: 사용자가 불만족스러워하는 응답의 비율입니다. 여기서는 0이므로, 불만족스러운 사용자가 없었음을 의미합니다.
  • apdex.satisfied: 응답에 만족하는 사용자의 비율입니다. 4명의 사용자가 만족했습니다.
  • apdex.tolerated: 응답을 용인할 만한 사용자의 비율입니다. 1명의 사용자가 용인할 만한 응답을 받았습니다.

metrics-by-endpoint

  • 특정 엔드포인트(/team/players)에 대한 성공적인 응답의 수와 응답 시간에 대한 통계를 제공합니다. 이는 해당 엔드포인트의 성능을 평가하는 데 사용될 수 있습니다.

더미 데이터의 역할

faker 라이브러리를 사용하여 더미 데이터를 생성하는 것은 부하 테스트를 진행하기 전에 선택적인 단계입니다. Artillery와 같은 부하 테스트 도구를 사용할 때 더미 데이터를 사전에 생성하는 것이 필요한지 여부는 테스트의 목적과 환경에 따라 달라집니다.

페이즈 별로 가상 사용자수(VUs)가 점차 증가하게 되는데, 이때 실제 데이터가 없는 경우, 가상 사용자가 수행할 수 있는 작업이 제한됩니다. 부하 테스트의 목적 중 하나는 실제 운영 환경에서의 시스템 성능과 안정성을 평가하는 것이므로, 실제와 유사한 데이터 환경을 구성하는 것이 중요합니다. 가상 사용자들이 실제 사용자의 행동을 모방하여 시스템에 요청을 보내는 것이 부하 테스트의 기본적인 메커니즘입니다. 이러한 요청은 데이터베이스 조회, 데이터 생성, 데이터 수정 등 다양한 형태가 될 수 있습니다.

예를 들어, 웹 애플리케이션에 대한 부하 테스트를 수행한다고 가정해 봅시다. 해당 애플리케이션에 로그인 기능, 게시물 조회, 게시물 작성 기능이 있다면, 이러한 기능을 테스트하기 위해서는 사용자 계정 정보, 게시물 데이터 등이 필요합니다. 만약 이 데이터가 없다면, 가상 사용자는 로그인을 시도할 수 없고, 게시물을 조회하거나 작성하는 행동을 수행할 수 없습니다.

실제 데이터가 없는 상황에서는 다음과 같은 문제가 발생할 수 있습니다:

  1. 기능적 문제 발견 불가: 데이터에 의존하는 기능이 제대로 작동하는지 평가할 수 없습니다.
  2. 성능 측정 오류: 데이터베이스와 같은 백엔드 시스템의 응답 시간, 처리량 등을 정확히 측정할 수 없어, 성능 평가가 부정확해질 수 있습니다.
  3. 사용자 경험 평가 불가: 실제 사용자가 애플리케이션을 사용할 때 발생할 수 있는 다양한 상황을 재현할 수 없으므로, 사용자 경험에 대한 평가가 어렵습니다.

따라서, 부하 테스트를 위해 더미 데이터를 생성하고 사용하는 것은, 실제 데이터가 없는 상황에서도 가상 사용자가 의미 있는 작업을 수행할 수 있도록 하여, 실제와 유사한 테스트 환경을 구축하는 데 매우 중요합니다. 이를 통해 보다 정확하고 유의미한 테스트 결과를 얻을 수 있습니다.

더미 데이터 생성이 필요한 경우:

  1. 실제와 유사한 테스트 환경: 실제 운영 환경과 유사한 데이터로 테스트를 진행하고자 할 때, faker를 사용하여 다양한 유형의 데이터를 생성하면 실제와 유사한 환경에서의 서비스 성능을 더 정확하게 측정할 수 있습니다.

  2. 데이터 의존성: 테스트하려는 시스템이 특정 형태의 데이터를 필요로 하며, 이 데이터가 사전에 준비되어 있지 않은 경우 (예: 사용자 프로필, 상품 정보 등) 더미 데이터를 생성해야 합니다.

  3. 데이터 베이스 스트레스 테스트: 데이터베이스에 대한 부하 테스트를 진행하고자 할 때, 충분한 양의 데이터가 필요할 수 있습니다. 이 경우 faker를 사용하여 대량의 테스트 데이터를 생성하고 데이터베이스에 삽입할 수 있습니다.

더미 데이터 생성이 필요하지 않은 경우:

  1. 단순한 부하 테스트: 단순히 시스템이나 애플리케이션의 동시 접속자 수나 트래픽 양을 테스트하는 경우, 실제 데이터의 복잡성이 중요하지 않을 수 있습니다.

  2. 기존 데이터 사용: 테스트 환경에 이미 충분한 양의 데이터가 존재하고 이를 재사용할 수 있는 경우, 추가로 더미 데이터를 생성할 필요가 없습니다.

결론적으로, faker를 사용하여 더미 데이터를 생성할지 여부는 테스트의 목적, 필요한 데이터의 종류, 테스트 환경의 현재 상태에 따라 결정되어야 합니다. 테스트 계획을 세울 때 이러한 요소들을 고려하여 결정하는 것이 좋습니다.

profile
황세민

0개의 댓글

관련 채용 정보