맥 설치 방법

// https://grafana.com/docs/k6/latest/set-up/install-k6/
brew install k6

간단 예제

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

export const options = {
  vus: 10,
  duration: '10s',
};

export default function () {
  const host = 'https://{hostname}';
  const payload = JSON.stringify({
    id: 'helloworld',
    password: 'helloworld!!@',
  });

  const params = {
    headers: {
      'Content-Type': 'application/json',
    },
  };

  const response = http.post(host + '/users/v1/sign-in', payload, params);

  check(response, {
    'status was 200': (r) => r.status === 200,
  });
}

실행 결과

$ k6 run k6-script.js

     ✓ status was 200

     checks.........................: 100.00% ✓ 247       ✗ 0
     data_received..................: 282 kB  28 kB/s
     data_sent......................: 42 kB   4.1 kB/s
     http_req_blocked...............: avg=1.7ms    min=0s       med=1µs      max=48.2ms   p(90)=2µs      p(95)=2µs
     http_req_connecting............: avg=301.65µs min=0s       med=0s       max=7.94ms   p(90)=0s       p(95)=0s
     http_req_duration..............: avg=406.81ms min=179.17ms med=399.92ms max=696.23ms p(90)=580.04ms p(95)=598.96ms
       { expected_response:true }...: avg=406.81ms min=179.17ms med=399.92ms max=696.23ms p(90)=580.04ms p(95)=598.96ms
     http_req_failed................: 0.00%   ✓ 0         ✗ 247
     http_req_receiving.............: avg=103.79µs min=13µs     med=70µs     max=1.88ms   p(90)=170.6µs  p(95)=254.69µs
     http_req_sending...............: avg=157.88µs min=27µs     med=101µs    max=2.31ms   p(90)=298.6µs  p(95)=413.49µs
     http_req_tls_handshaking.......: avg=899.4µs  min=0s       med=0s       max=28.3ms   p(90)=0s       p(95)=0s
     http_req_waiting...............: avg=406.55ms min=179.04ms med=399.68ms max=696.07ms p(90)=579.72ms p(95)=598.62ms
     http_reqs......................: 247     24.207321/s
     iteration_duration.............: avg=409.38ms min=197.22ms med=401.31ms max=696.6ms  p(90)=584.91ms p(95)=606.99ms
     iterations.....................: 247     24.207321/s
     vus............................: 10      min=10      max=10
     vus_max........................: 10      min=10      max=10


running (10.2s), 00/10 VUs, 247 complete and 0 interrupted iterations
default ✓ [======================================] 10 VUs  10s
지표 설명 예시
checks 테스트에서 정의한 조건을 통과한 비율 100.00% ✓ 247 ✗ 0
data_received 서버로부터 수신된 데이터 양 282 kB (28 kB/s)
data_sent 클라이언트에서 서버로 전송된 데이터 양 42 kB (4.1 kB/s)
http_req_blocked 네트워크 수준에서 요청이 차단된 시간 avg=1.7ms, max=48.2ms
http_req_connecting 서버에 연결하는 데 걸린 시간 avg=301.65µs, max=7.94ms
http_req_duration 요청을 보내고 응답을 받기까지 걸린 총 시간 (응답 시간) avg=406.81ms, max=696.23ms
http_req_failed 실패한 HTTP 요청의 비율 0.00% (모든 요청 성공)
http_req_receiving 서버로부터 응답 데이터를 수신하는 데 걸린 시간 avg=103.79µs, max=1.88ms
http_req_sending 요청을 서버로 전송하는 데 걸린 시간 avg=157.88µs, max=2.31ms
http_req_tls_handshaking TLS 핸드셰이크에 걸린 시간 avg=899.4µs, max=28.3ms
http_req_waiting 서버가 응답을 준비하는 데 걸린 시간 avg=406.55ms, max=696.07ms
http_reqs 총 HTTP 요청 수 247 (24.21 요청/초)
iteration_duration 각 테스트 반복에 걸린 시간 avg=409.38ms, max=696.6ms
iterations 총 테스트 반복 횟수 247
vus (Virtual Users) 동시에 실행된 가상 사용자(Virtual Users) 수 10 (최소 10, 최대 10)

다른 부하 테스트 도구 비교

https://baeji-develop.tistory.com/118