23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
k6는 옵션을 이용하여 테스트를 위한 시나리오, 워크로드, 테스트 시간등을 지정할 수 있다.
k6는 다양한 방법으로 옵션을 지정하는 방법을 제공하고 있다.
CLI 플래그로 지정
환경변수로 지정
스크립트에서 options 객체 이용하기
테스트 케이스에 따라서 어떤 옵션을 이용할지 지정할 수 있다.
테스트 중 옵션에 엑세스도 가능하다.
중복 옵션이 들어온경우 아래 순서대로 우선순위에 따라 적용된다.
기본 옵션이용됨
--config 로 지정한 플래그로 옵션 사용
script에서 옵션 값 지정
환경변수 이용
CLI 플래그 이용
위와 같이 1 --> 5번의 순으로 옵션을 검사하여 사용한다.
5가 가장 우선순위가 높다.
옵션은 개인 선호에 따른 위치에서 사용된다.
어떤때는 테스트 컨텍스트에 따라 옵션을 배치할 가장 합리적인 위치가 결정된다.
스크립트 옵션 개체는 일반적으로 옵션을 넣는 가장 좋은 위치이다.
자동으로 버젼 제어를 제공하고 쉽게 재사용이 가능하며, 스크립트를 모듈화 할 수 있다.
커맨드 라인으로 실행하려는 경우 명령줄 플래그를 이용하면 된다.
커맨드 라인을 이용하면, 파일내 지정한 옵션을 오버라이드 할 수 있다. (우선순위 참고)
import http from 'k6/http';
export const options = {
hosts: { 'test.k6.io': '1.2.3.4' },
stages: [
{ duration: '1m', target: 10 },
{ duration: '1m', target: 20 },
{ duration: '1m', target: 0 },
],
thresholds: { http_req_duration: ['avg<100', 'p(95)<200'] },
noConnectionReuse: true,
userAgent: 'MyK6UserAgentString/1.0',
};
export default function () {
http.get('http://test.k6.io/');
}위 옵션은 hosts, stages, thresholds, noConnectionReuse, userAgent 와 같은 옵션을 지정하였다.
hosts:
DNS를 확인할때 해당 옵션으로 재정의할 수 있다.
"domain" : "ip:port" 형태로 호스트를 지정할 수 있다.
stages:
stages 는 테스트 부하가 주입되는 단계를 설정할 수 있다.
일반적으로 테스트는 RampUp --> Load --> RampBackDown 의 순서로 수행이 된다.
위 예제에서는 RampUp으로 10유저를 1분간 생성한다. 그리고 Load는 20 유저를 1분간 수행하고, 마지막으로 RampBackDown으로 사용자를 1분동안 0으로 만든다.
threshold:
테스트 종료 조건을 지정하고, 해당 종료조건을 넘어서게 되면 테스트를 종료하게 된다.
noConnectionReuse:
keepalive를 유지할지 여부를 결정한다.
기본값은 false이며, true인경우 커넥션을 재사용하지 않으므로 keepalive를 유지하게 된다.
userAgent:
http 요청을 보낼때 사용자 agent 정보를 지정한다.
이렇게 지정하고 테스트를 수행하면 워크로드 요청시 agent를 실어서 전송하게 된다.
환경 변수를 지정하고, 이를 테스트 옵션으로 활용하여 테스트를 수행할 수 있다.
K6_NO_CONNECTION_REUSE=true K6_USER_AGENT="MyK6UserAgentString/1.0" k6 run script.js
k6 run --no-connection-reuse --user-agent "MyK6UserAgentString/1.0" script.js'--env' 옵션 커맨드를 이용하면 환경변수 값으로 원하는 값을 k6에 전달할 수 있다.
k6 run script.js --env MY_USER_AGENT="hello"import http from 'k6/http';
export const options = {
userAgent: __ENV.MY_USER_AGENT,
};
export default function () {
http.get('http://test.k6.io/');
}위와 같이 외부에서 주입된 환경 변수는 __ENV.MY_USER_AGENT 에대입된다.
환경 변수는 __ENV. 으로 접근이 가능하다.
옵션값을 지정한 경우, 실제 실행되는 함수에서 해당 옵션을 이용할 수 있다.
import exec from 'k6/execution';
export const options = {
stages: [
{ duration: '5s', target: 100 },
{ duration: '5s', target: 50 },
],
};
export default function () {
console.log(exec.test.options.scenarios.default.stages[0].target); // 100
}위 코드는 exec.test.options 로 옵션의 최 상단에 접근한다.
이후 scenarios 를 이용하면 현재 시나리오에 접근이 가능하다. 모든 테스트는 시나리오가 있다.
default 시나리오에 접근하였다. 시나리오 이름이 없다면 default가 기본 이름이다.
stages 중 인덱스를 이용하여 접근한다. 여기서는 0번 스테이지에 접근하였다.
stages[0].targets 를 통해서 대상 vuser를 조회하였다. 값은 100이 출력될 것이다.
config 옵션을 이용하여 옵션 파일을 테스트에 주입할 수 있다.
옵션 파일은 json 형태로 작성이 가능하며, 해당 파일을 --config 라는 옵션을 이용하여 k6에 전달하고 있다.
k6 run --config options.json script.jsoptions.json 파일을 다음과 같이 작성한다.
{
"hosts": {
"test.k6.io": "1.2.3.4"
},
"stages": [
{
"duration": "1m",
"target": 10
},
{
"duration": "1m",
"target": 30
},
{
"duration": "1m",
"target": 0
}
],
"thresholds": {
"http_req_duration": ["avg<100", "p(95)<200"]
},
"noConnectionReuse": true,
"userAgent": "MyK6UserAgentString/1.0"
}다른 방법은 옵션 파일을 소스에서 불러오는 방법이 있다.
// 내보낸 옵션 개체를 채우는 데 사용되는 부하 테스트 구성
const testConfig = JSON.parse(open('./config/test.json'));
// 위 옵션에서 전달된 옵션 정보를 세팅한다.
export const options = testConfig;from: https://k6.io/docs/using-k6/k6-options/how-to/
k6는 여러개의 단계로 실행이 된다.
스테이지는 항상 동일한 순서로 실행된다.
init 는 스크립트를 초기화 한다. 파일로드, 모듈 임포트, 함수 정의등
(선택사항) setup코드는 환경을 준비하고, 데이터를 생성한다.
VU코드는 default 함수에서 수행된다. 실제로 테스트 요청을 보내는 코드가 작성된다. 옵션에 정의한 만큼 반복 동작한다.
(선택사항) teardown 함수는 테스트의 환경을 정리하고, 자원을 릴리즈한다.
// 1. init code
export function setup() {
// 2. setup code
}
export default function (data) {
// 3. VU code
}
export function teardown(data) {
// 4. teardown code
}k6는 테스트를 수행하기 위해서 init함수에서 테스트 환경을 정의하며 다음과 같은 일을 수행한다.
모듈 임포트
로컬 파일 시스템에서 파일 로드
모든 옵션에 대한 설정 테스트
함수 정의 (default에서 수행 혹은 setup, teardown에서 수행)
init 은 필수 영역이다.
// init context: 모듈을 import 한다.
import http from 'k6/http';
import { Trend } from 'k6/metrics';
// init context: k6 옵션을 정의한다.
export const options = {
vus: 10,
duration: '30s',
};
// init context: 글로벌 변수를 생성한다.
const customTrend = new Trend('oneCustomMetric');
// init context: 커스텀 함수를 수행한다.
function myCustomFunction() {
// ...
}VU스테이지는 필수이다.
default 함수에서 실제 테스트를 수행한다.
혹은 옵션에서 특정 시나리오가 정의한 함수를 수행할 수 있다.
export default function () {
// do things here...
}VU코드는 테스트가 수행되는 기간동안 지속적으로 반복 수행된다.
VU코드는 테스트를 위한 http코드를 생성하고, 메트릭의 생성, 테스트를 위한 모든 작업을 수행한다.
job 함수를 제외하고 모든 작업이 수행되며, job은 init함수에서 수행된다.
VU코드는 로컬 파일을 읽을 수 없다.
VU코드는 어떠한 모듈도 로드할 수 없다.
default와 마찬가지로 setup과 teardown은 반드시 export 로 정의해야한다.
default와는 다르게 setup, teardown은 오직 한번씩만 수행된다.
setup은 init 다음에 수행되며 오직 한번만 수행된다.
teardown은 테스트 끝날때 한번만 수행되며 VU 코드가 종료되고 난뒤 바로 수행된다.
import http from 'k6/http';
export const options = {
vus: 10,
duration: '30s',
};
export function setup() {
const res = http.get('https://httpbin.test.k6.io/get');
console.log("Setup: 01 :");
return { data: res.json() };
}
export function teardown(data) {
console.log("Function teardown : " + JSON.stringify(data));
}
export default function (data) {
console.log("Function default : " + JSON.stringify(data));
}옵션을 이용하여 함수를 스킵할 수 있다.
k6 run --no-setup --no-teardown ...'--no-setup' 옵션을 이용하여 셋업을 스킵한다.
'--no-teardown' 옵션을 이용하여 teardown 을 스킵한다.
setup에서 정의한 데이터를 default function과 teardown 으로 전달할 수 있다.
// 1. init code
export function setup() {
// 2. setup code
}
export default function (data) {
// 3. VU code
}
export function teardown(data) {
// 4. teardown code
}위와 같이 데이터를 전달할 수 있다.
export function setup() {
return { v: 1 };
}
export default function (data) {
console.log(JSON.stringify(data));
}
export function teardown(data) {
if (data.v != 1) {
throw new Error('incorrect data: ' + JSON.stringify(data));
}
}위와 같은 방법으로 데이터를 전달한다.
setup에서 데이터를 return을 하게 되면 이 return 된 객체가 전달이 되는 방식이다.
이후 defult, teardown에서 data를 파라미터로 전달 받을 수 있다.
데이터는 오직 json 데이터만 전달가능하며, 함수는 전달불가이다.
데이터가 너무 크면 더 많은 메모리가 사용된다.
default() 에서 데이터를 변경할 수 없다.
from: https://k6.io/docs/using-k6/test-life-cycle/
- 지금까지 K6의 옵션의 이용법을 알아 보았다. 옵션은 로드를 생성하고 성능테스트를 위한 설정 정보를 지정하는 곳이다.
- 또한 K6 가 수행되는 구조를 이해할 수 있었고, Init --> Setup --> VU --> Teardown 으로 수행됨을 이해할 수 있었다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.