데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      [K6 성능테스트 도구 - 07] Constant arrival rate& Ramping arrival rate 알아보기

      KIDO 23.02.09
      3,280 11 0

      Constant arrival rate

      • 지정된 시간동안 고정된 수의 반복이 수행된다.

      • 이 실행기는 반복을 실행할 수 있는 VU가 있는 한 지정된 속도로 반복을 계속 시작한다.

      • 반복 실행 시간은 테스트 로직이나 테스트 중인 시스템이 더 느리게 응답하기 때문에 달라질 수 있다.

      • 이 실행기는 구성된 반복 속도를 충족하기 위해 테스트 중간에 더 많은 초기화를 포함하여 가변 수의 VU를 실행하여 보상을 시도한다.

      • 이 접근 방식은 예를 들어 RPS를 보다 정확하게 표현하는 데 유용하다.

      • 자세한 내용은 도착율 섹션을 참조하라. https://k6.io/docs/using-k6/scenarios/arrival-rate


      Options

      OPTION

      TYPE

      DESCRIPTION

      DEFAULT

      duration(required)

      string

      총 시나리오 기간 (gracefulStop 제외)

      -

      rate(required)

      integer

      각 timeUtil 기간 동안 시작할 반복 횟수이다.

      -

      preAllocatedVUs(required)

      integer

      런타임 리소스를 보존하기 위해 테스트 시작 전에 미리 할당할 VU 수이다.

      -

      timeUnit

      string

      요율 값을 적용하는 기간이다 .

      "1s"

      maxVUs

      integer

      테스트 실행 중에 허용할 최대 VU 수이다 .

      설정되지 않은 경우 preAllocatedVU와 동일


      When to use

      • 테스트 중인 시스템의 성능에 영향을 받지 않고 일정한 수의 반복을 유지하려는 경우


      Examples

      • 이 예에서 우리는 30초 동안 초당 30번의 일정한 속도로 시작하여 k6이 최대 50개의 VU를 동적으로 예약할 수 있도록 했다.

      import http from 'k6/http';
      import { sleep } from 'k6';
      
      export const options = {
        discardResponseBodies: true,
        scenarios: {
          contacts: {
            executor: 'constant-arrival-rate',
      
            // 테스트는 총 30초 동안 지속되어야 한다. 
            duration: '30s',
      
            //  timeUnit당 30번의 반복을 시작해야한다. 반복 시작점에 유의하라. 
            //  timeUnit 기간에 고르게 분산된다. 
            rate: 30,
      
            //  초당 rate 반복을 시작해야한다. 
            timeUnit: '1s',
      
            //  테스트를 시작하기 전에 2개의 VU를 미리 할당해야 한다. 
            preAllocatedVUs: 2,
      
            // 정의된 일정 도착율을 유지하기 위해 최대 50개의 VU를 회전할 수 있다. 
            maxVUs: 50,
          },
        },
      };
      
      export default function () {
        http.get('https://test.k6.io/contacts.php');
        // We're injecting a processing pause for illustrative purposes only!
        // Each iteration will be ~515ms, therefore ~2 iterations/second per VU maximum throughput.
        sleep(0.5);
      }
      • 참고: 고정된 요청 속도를 안정적으로 달성하려면 단일 요청 호출만 사용하고 추가 처리 또는 Sleep() 호출 없이 매우 간단하게 함수를 실행하는 것이 좋다.


      관찰

      • 다음 그래프는 예제 스크립트의 성능을 보여준다.

      constant-arrival-rate

      • 테스트 시나리오 입력 및 결과를 기반으로

        • 1초마다 시작되는 30회 반복의 원하는 비율이 달성되고 대부분의 테스트 동안 유지된다.

        • 테스트 시나리오는 지정된 30초 동안 실행된다.

        • 2개의 VU(preAllocatedVUs 옵션으로 지정)로 시작한 k6은 VU 수을 자동으로 조정하여 최대 maxVU까지 원하는 비율을 달성한다. 테스트에서는 17VU로 끝났다.

        • 정확히 900번의 반복 총 30초 * 30 반복으로 계산된다.

      • 이 예제에서와 같이 preAllocatedVUs 설정을 너무 낮게 사용하면 속도를 달성하기 위해 리소스를 지속적으로 할당해야 하므로 원하는 속도로 테스트 기간이 단축된다.

      Ramping arrival rate

      • 지정된 기간 동안 다양한 수의 반복이 시작된다.

      • 이는 Ramping VU 실행기와 유사하지만 특정 반복 횟수를 유지하기 위한 것이다.

      • k6는 구성된 반복 속도를 달성하기 위해 VU 수를 동적으로 변경하려고 시도한다.


      Options

      OPTION

      TYPE

      DESCRIPTION

      DEFAULT

      stages(required)

      array

      증가 또는 감소할 대상 반복 횟수를 지정하는 객체의 배열이다.

      []

      preAllocatedVUs(required)

      integer

      런타임 리소스를 보존하기 위해 테스트 시작 전에 미리 할당할 VU 수이다.

      -

      startRate

      integer

      테스트 시작 시 timeUnit 기간마다 실행할 반복 횟수 이다.

      0

      timeUnit

      string

      단계의 대상 값에 startRate를 적용하는 기간이다. 그 값은 시나리오의 전체 기간 동안 일정하며 특정 단계에서는 변경할 수 없다.

      "1s"

      maxVUs

      integer

      테스트 실행 중에 허용할 최대 VU 수이다.

      설정되지 않은경우 preAllocatedVUs와 동일해진다.


      When to use

      • 테스트가 테스트중인 시스템의 성능에 영향을 받지 않도록 해야 하고 특정 기간 동안 반복 횟수를 늘리거나 줄이려는 경우


      Examples

      • 이 예에서는 4단계 테스트를 수행한다.

      • 첫번째 1분동안 300회 반복을 시작하는 정의된 속도로 유지한다.

      • 그런다음 2분 동안 분당 300번에서 600번으로 반복 속도를 높이고 이 속도록 4분더 유지한다.

      • 마지막으로 지난 2분 동안 분당 60회 반복을 시작한다.

      import http from 'k6/http';
      import exec from 'k6/execution';
      
      export const options = {
        discardResponseBodies: true,
      
        scenarios: {
          contacts: {
            executor: 'ramping-arrival-rate',
      
            //  timeUnit(예 분)당 300번의 반복 속도로 테스트를 시작했다. 
            startRate: 300,
      
            //  분당 'startRate' 반복을 시작해야 한다. 
            timeUnit: '1m',
      
            // 테스트를 시작하기 전에 2개의 VU를 미리 할당해야한다. 
            preAllocatedVUs: 2,
      
            // 정의된 일정한 도달률을 유지하기 위해 최대 50개의 VU를 회전할 수 있다. 
            maxVUs: 50,
      
            stages: [
              // 처음 1분 동안 'timeUnit' 당 300번의 반복을 시작해야한다. 
              { target: 300, duration: '1m' },
      
              // 다음 2분 동안 'timeUnit' 당 600회의 반복을 시작 하도록 선형으로 증가해야한다. 
              { target: 600, duration: '2m' },
      
              // 다음 4분 동안 'timeUnit' 당 600번의 반복을 계속 시작해야한다. 
              { target: 600, duration: '4m' },
      
              // 지난 기분 동안 'timeUnit' 당 60회 반복을 시작하도록 선형으로 감소해야 한다. 
              { target: 60, duration: '2m' },
            ],
          },
        },
      };
      
      export default function () {
        http.get('https://test.k6.io/contacts.php');
      }


      관찰

      • 다음 그래프는 예제 스크립트의 성능을 보여준다.

      ramping-arrive-rate

      • 테스트 시나리오의 입력 및 결과를 기반으로

        • 총 9분의 테스트 기간 동안 4개의 단계를 정의했다.

        • 1단계에서 startRate 반복 속도를 1분 동안 분당 시작된 300회 반복으로 유지한다.

        • 2단계 1단계에서 분당 300회 반복 시작에서 2분동안 분당 600회 반복 목표 까지 선형으로 반복 속도를 높인다.

        • 3단계 4분동안 분당 600회 반복으로 2단계를 유지한다.

        • 4단계 지난 2분 동안 60회 반복이라는 목표 속도로 선형으로 줄어든다.

        • 반복 속도에 대한 변경은 k6에 의해 수행되며 필요에 따라 VU 수를 preAllocatedVU에서 최대 maxVU로 조정한다.

        • 스크립트는 반복이 완료될 때까지 일정 기간(gracefulStop 옵션으로 정의됨) 동안 기다린다. GracefulStop 기간 동안 새 반복을 시작하지 않는다.

        • 스크립트는 종료하기 전에 teardown() 함수(지정된 경우)를 실행한다.

        • 우리의 예는 테스트 과정에서 4020번의 반복을 수행한다.


      Get the stage index

      • 현재 실행중인 단계 인덱스를 가져오려면 k6-jslib-utils 라이브러리에서 getCurrentStageIndex 도우미 함수를 사용한다.

      • 바로 가기 단계 배열 또는 실행기의 다른 배열에서 위치와 동일한 0부터 시작하는 숫자를 반환한다.

      import { getCurrentStageIndex } from 'https://jslib.k6.io/k6-utils/1.3.0/index.js';
      
      export const options = {
        stages: [
          { target: 10, duration: '30s' },
          { target: 50, duration: '1m' },
          { target: 10, duration: '30s' },
        ],
      };
      
      export default function () {
        if (getCurrentStageIndex() === 1) {
          console.log('Running the second stage where the expected target is 50');
        }
      }


      WrapUp:

      • 지금까지 Constant arrival rate 를 통해서 일정한 수준의 리퀘스트를 요청하도록 부하를 발생해 보았다.

      • 그리고 Rapimg arrival rate 를 통해서 특정 시간동안 rampup 을 수행한 후 rampdown 을 수행하는 방법에 대해서 알아 보았다.

      • arrival rate 는 대상 서비스의 응답 시간이 늦어 TPS가 떨어지는 것을 방지하면서도 일정 수준의 요청을 보낼 수 있다는 것도 확인할 수 있었다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      KIDO 님의 최신 블로그

      더보기
      동영상 기고하기