23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
지정된 시간동안 고정된 수의 반복이 수행된다.
이 실행기는 반복을 실행할 수 있는 VU가 있는 한 지정된 속도로 반복을 계속 시작한다.
반복 실행 시간은 테스트 로직이나 테스트 중인 시스템이 더 느리게 응답하기 때문에 달라질 수 있다.
이 실행기는 구성된 반복 속도를 충족하기 위해 테스트 중간에 더 많은 초기화를 포함하여 가변 수의 VU를 실행하여 보상을 시도한다.
이 접근 방식은 예를 들어 RPS를 보다 정확하게 표현하는 데 유용하다.
자세한 내용은 도착율 섹션을 참조하라. https://k6.io/docs/using-k6/scenarios/arrival-rate
일반적인 구성 옵션 외에 이 실행 프로그램은 다음 옵션도 추가한다.
일반적인 구성옵션: https://k6.io/docs/using-k6/scenarios#common-options
OPTION | TYPE | DESCRIPTION | DEFAULT |
|---|---|---|---|
duration(required) | string | 총 시나리오 기간 (gracefulStop 제외) | - |
rate(required) | integer | 각 timeUtil 기간 동안 시작할 반복 횟수이다. | - |
preAllocatedVUs(required) | integer | 런타임 리소스를 보존하기 위해 테스트 시작 전에 미리 할당할 VU 수이다. | - |
timeUnit | string | 요율 값을 적용하는 기간이다 . | "1s" |
maxVUs | integer | 테스트 실행 중에 허용할 최대 VU 수이다 . | 설정되지 않은 경우 preAllocatedVU와 동일 |
테스트 중인 시스템의 성능에 영향을 받지 않고 일정한 수의 반복을 유지하려는 경우
이 예에서 우리는 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() 호출 없이 매우 간단하게 함수를 실행하는 것이 좋다.
다음 그래프는 예제 스크립트의 성능을 보여준다.
테스트 시나리오 입력 및 결과를 기반으로
1초마다 시작되는 30회 반복의 원하는 비율이 달성되고 대부분의 테스트 동안 유지된다.
테스트 시나리오는 지정된 30초 동안 실행된다.
2개의 VU(preAllocatedVUs 옵션으로 지정)로 시작한 k6은 VU 수을 자동으로 조정하여 최대 maxVU까지 원하는 비율을 달성한다. 테스트에서는 17VU로 끝났다.
정확히 900번의 반복 총 30초 * 30 반복으로 계산된다.
이 예제에서와 같이 preAllocatedVUs 설정을 너무 낮게 사용하면 속도를 달성하기 위해 리소스를 지속적으로 할당해야 하므로 원하는 속도로 테스트 기간이 단축된다.
지정된 기간 동안 다양한 수의 반복이 시작된다.
이는 Ramping VU 실행기와 유사하지만 특정 반복 횟수를 유지하기 위한 것이다.
k6는 구성된 반복 속도를 달성하기 위해 VU 수를 동적으로 변경하려고 시도한다.
일반적인 구성 옵션 외에 이 실행 프로그램은 다음 옵션도 추가한다.
일반적인 구성옵션: https://k6.io/docs/using-k6/scenarios#common-options
OPTION | TYPE | DESCRIPTION | DEFAULT |
|---|---|---|---|
stages(required) | array | 증가 또는 감소할 대상 반복 횟수를 지정하는 객체의 배열이다. | [] |
preAllocatedVUs(required) | integer | 런타임 리소스를 보존하기 위해 테스트 시작 전에 미리 할당할 VU 수이다. | - |
startRate | integer | 테스트 시작 시 timeUnit 기간마다 실행할 반복 횟수 이다. | 0 |
timeUnit | string | 단계의 대상 값에 startRate를 적용하는 기간이다. 그 값은 시나리오의 전체 기간 동안 일정하며 특정 단계에서는 변경할 수 없다. | "1s" |
maxVUs | integer | 테스트 실행 중에 허용할 최대 VU 수이다. | 설정되지 않은경우 preAllocatedVUs와 동일해진다. |
테스트가 테스트중인 시스템의 성능에 영향을 받지 않도록 해야 하고 특정 기간 동안 반복 횟수를 늘리거나 줄이려는 경우
이 예에서는 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');
}다음 그래프는 예제 스크립트의 성능을 보여준다.
테스트 시나리오의 입력 및 결과를 기반으로
총 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번의 반복을 수행한다.
현재 실행중인 단계 인덱스를 가져오려면 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');
}
}이 기능을 사용하면 현재 실행 중인 단계를 사용하여 자동으로 태그를 지정할 수 있다.
자세한 내용은 태그 지정 단계 섹션을 확인하라. https://k6.io/docs/using-k6/tags-and-groups/#tagging-stages
지금까지 Constant arrival rate 를 통해서 일정한 수준의 리퀘스트를 요청하도록 부하를 발생해 보았다.
그리고 Rapimg arrival rate 를 통해서 특정 시간동안 rampup 을 수행한 후 rampdown 을 수행하는 방법에 대해서 알아 보았다.
arrival rate 는 대상 서비스의 응답 시간이 늦어 TPS가 떨어지는 것을 방지하면서도 일정 수준의 요청을 보낼 수 있다는 것도 확인할 수 있었다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.