K6 성능 테스트 툴

category 백엔드/성능 최적화 2022. 3. 31. 10:45
728x90
반응형

K6이란?

k6은 엔지니어링 팀의 성능 테스트를 쉽고 생산적으로 만드는 오픈 소스 부하 테스트 도구이다.
k6은 무료이며 개발자 중심적이며 확장 가능하다.

출처 : https://commons.wikimedia.org/wiki/File:K6-logo.svg

 

주요특징

  • 테스트 스크립트를 Javascript  (ES6) 로 작성. jmeter (jmx) 대비 개발자 친화적이고, 시나리오와 함께 테스트 설정까지 코드로 구현 가능, 재사용을 위한 모듈화 가능
  • Jmeter 대비 더 작은 리소스로 성능 테스트 구현, 즉, jmeter 보다 동일자원에서 더 많은 트래픽을 생산 가능

 

window 설치방법

1. PowerShell을 활용하여 Chocolatey 패키지 매니저를 설치

C:\> Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

2. 설치가 완료되면 choco 명령어를 사용하여 k6을 설치

C:\> choco install k6 --version 0.34.1

 

ubuntu 설치방법

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69
echo "deb https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list
sudo apt-get update
sudo apt-get install k6

 

사용방법

1. 샘플 코드 작성 (sample.js)

아래 링크에 다양한 옵션들이 있으니 참조해서 사용해보면 된다.

https://k6.io/docs/using-k6/options/#discard-response-bodies

import http from 'k6/http';
import {sleep} from 'k6';
 
export const options = {
    // see https://k6.io/docs/using-k6/options/#discard-response-bodies
    // discardResponseBodies: true,
    // see https://k6.io/docs/using-k6/options/#stages
    // ex) 30초 동안 10명
    stages: [
        {duration: '30s', target: 10} 
    ],
    // see https://k6.io/docs/using-k6/options/#hosts
    // hosts: {
    //   'test.k6.io': '1.2.3.4',
    //   'test.k6.io:443': '1.2.3.4:8443',
    // },
    hosts: null,
};
 
export default function() {
    const url = 'http://localhost/sample';
    const payload = JSON.stringify({
        api_key: 'xxxxx'
    });
 
    const params = {
        headers: {
            'Content-Type': 'application/json',
        },
    };
 
    http.post(url, payload, params);
}

2. 실행

D:\example>k6 run sample.js
 
          /\      |‾‾| /‾‾/   /‾‾/
     /\  /  \     |  |/  /   /  /
    /  \/    \    |     (   /   ‾‾\
   /          \   |  |\  \ |  (‾)  |
  / __________ \  |__| \__\ \_____/ .io
 
  execution: local
     script: sample.js
     output: -
 
  scenarios: (100.00%) 1 scenario, 10 max VUs, 2m50s max duration (incl. graceful stop):
           * default: Up to 10 looping VUs for 2m20s over 3 stages (gracefulRampDown: 30s, gracefulStop: 30s)
 
 
running (0m00.9s), 01/10 VUs, 316 complete and 0 interrupted iterations
default   [--------------------------------------] 01/10 VUs  0m00.8s/2m20.0s
running (2m20.0s), 00/10 VUs, 56233 complete and 0 interrupted iterations
default ✓ [======================================] 00/10 VUs  2m20s
 
     data_received..............: 26 MB   186 kB/s
     data_sent..................: 10 MB   72 kB/s
     http_req_blocked...........: avg=630.1µs  min=0s     med=512.7µs max=22.96ms  p(90)=1.33ms  p(95)=1.94ms
     http_req_connecting........: avg=575.37µs min=0s     med=507.9µs max=18.97ms  p(90)=1.22ms  p(95)=1.83ms
     http_req_duration..........: avg=17.01ms  min=0s     med=16.39ms max=341.48ms p(90)=28.28ms p(95)=36.07ms
     http_req_failed............: 100.00% ✓ 56233      ✗ 0
     http_req_receiving.........: avg=752.87µs min=0s     med=681.1µs max=23.79ms  p(90)=1.55ms  p(95)=1.95ms
     http_req_sending...........: avg=100.82µs min=0s     med=0s      max=22.96ms  p(90)=503.6µs p(95)=975.7µs
     http_req_tls_handshaking...: avg=0s       min=0s     med=0s      max=0s       p(90)=0s      p(95)=0s
     http_req_waiting...........: avg=16.16ms  min=0s     med=15.49ms max=341.48ms p(90)=27.33ms p(95)=35.12ms
     http_reqs..................: 56233   401.655215/s
     iteration_duration.........: avg=20.62ms  min=1.54ms med=17.15ms max=2.63s    p(90)=29.52ms p(95)=37.78ms
     iterations.................: 56233   401.655215/s
     vus........................: 1       min=1        max=10
     vus_max....................: 10      min=10       max=10

 

728x90
반응형