본문 바로가기
Programming/개발툴 SW

[TOOL] js 베이스 스트레스 테스트 툴 : k6

by BitSense 2022. 8. 5.
반응형

https://k6.io/

설치(mac)

brew install k6

기본 테스트 스크립트 샘플

# filename: script.js
import http from 'k6/http';
import { sleep } from 'k6';

export default function () {
  http.get('https://test.k6.io');
  sleep(1);
}

기본 실행 방법

k6 run script.js

VU (Virtual User) 추가 실행

k6 run --vus 10 --duration 30s script.js

--vus : 동시접속자를 10명으로 유지
--duration : 30초 동안 vus 수를 유지 호출

옵션 vu, duration을 소스에 추가해서 실행

import http from 'k6/http';
import { sleep } from 'k6';
export const options = {
  vus: 10,
  duration: '30s',
};
export default function () {
  http.get('http://test.k6.io');
  sleep(1);
}

vu를 원하는 시간만큼 조절해서 사용 가능

import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  stages: [
    { duration: '30s', target: 20 },
    { duration: '1m30s', target: 10 },
    { duration: '20s', target: 0 },
  ],
};

export default function () {
  const res = http.get('https://httpbin.org/');
  check(res, { 'status was 200': (r) => r.status == 200 });
  sleep(1);
}

테스트 결과 설명

 k6 run stages.js                        

          /\      |‾‾| /‾‾/   /‾‾/   
     /\  /  \     |  |/  /   /  /    
    /  \/    \    |     (   /   ‾‾\  
   /          \   |  |\  \ |  (‾)  | 
  / __________ \  |__| \__\ \_____/ .io

  execution: local
     script: stages.js
     output: -

  scenarios: (100.00%) 1 scenario, 20 max VUs, 2m50s max duration (incl. graceful stop):
           * default: Up to 20 looping VUs for 2m20s over 3 stages (gracefulRampDown: 30s, gracefulStop: 30s)


running (2m20.2s), 00/20 VUs, 1473 complete and 0 interrupted iterations
default ✓ [======================================] 00/20 VUs  2m20s

     ✓ status was 200

     checks.........................: 100.00% ✓ 1473      ✗ 0   
     data_received..................: 15 MB   104 kB/s
     data_sent......................: 137 kB  974 B/s
     http_req_blocked...............: avg=8.56ms   min=0s       med=1µs      max=763.5ms  p(90)=2µs      p(95)=4µs     
     http_req_connecting............: avg=2.78ms   min=0s       med=0s       max=232.77ms p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=224.38ms min=190.95ms med=201.72ms max=961.94ms p(90)=236.09ms p(95)=351.89ms
       { expected_response:true }...: avg=224.38ms min=190.95ms med=201.72ms max=961.94ms p(90)=236.09ms p(95)=351.89ms
     http_req_failed................: 0.00%   ✓ 0         ✗ 1473
     http_req_receiving.............: avg=165.03µs min=43µs     med=162µs    max=1.75ms   p(90)=222µs    p(95)=236.39µs
     http_req_sending...............: avg=145.88µs min=31µs     med=140µs    max=1.39ms   p(90)=218µs    p(95)=241µs   
     http_req_tls_handshaking.......: avg=5.72ms   min=0s       med=0s       max=510.91ms p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=224.06ms min=190.72ms med=201.37ms max=961.59ms p(90)=235.76ms p(95)=351.55ms
     http_reqs......................: 1473    10.504156/s
     iteration_duration.............: avg=1.23s    min=1.19s    med=1.2s     max=1.96s    p(90)=1.24s    p(95)=1.39s   
     iterations.....................: 1473    10.504156/s
     vus............................: 1       min=1       max=20
     vus_max........................: 20      min=20      max=20
  • vus — 활성 가상 사용자 수
  • vus_max — 테스트에 할당 된 최대 가상 사용자
  • iterations— default함수가 호출 된 총 횟수
  • iteration_duration— default함수 를 실행하는 데 걸린 총 시간
  • dropped_iterations— iterations시작할 수없는 수
  • data_received — 수신 된 데이터의 양
  • data_sent — 전송 된 데이터 양
  • checks — 성공적인 검사 비율 (나중에 설명)
  • http_reqs — k6에 의해 생성 된 총 요청
  • http_req_blocked — 요청을 시작하기 전에 사용 가능한 TCP 연결을 기다리는 데 소요 된 시간
  • http_req_connecting — TCP 연결 설정에 소요 된 시간
  • http_req_tls_handshaking — TLS 핸드 쉐이킹에 소요 된 시간
  • http_req_sending — 데이터 전송에 소요 된 시간
  • http_req_waiting — 원격 호스트의 응답을 기다리는 데 소요 된 시간
  • http_req_receiving — 데이터 수신에 소요 된 시간
  • http_req_duration— 요청에 대한 총 시간. http_req_sending+ http_req_waiting+를 기준으로 계산됩니다.http_req_receiving.
반응형