1. K6
- K6 는 확장 가능한 오픈 소스 부하 테스트 도구이다.
- K6 를 통해 애플리케이션과 인프라 안정성, 성능을 테스트할 수 있으며, 이를 통해 탄력적인 애플리케이션 구축을 지원한다.
(1) Use Case
K6 사용자는 개발자, QA 엔지니어, SRE 등이 대상이다.
- 부하 및 성능 테스트 : spike, stress, soak test 와 같은 고부하 성능 테스트를 지원한다.
- 브라우저 성능 테스트 : K6 브라우저 API 를 통해 브라우저 기반 성능 테스트 실행 및 메트릭을 수집해 성능 문제를 파악할 수 있다.
- 성능 및 종합 모니터링 : 최소한의 부하로 자주 테스트 실행이 가능하고 K6 스크립트 실행을 지원하는 Grafana Cloud 종합 모니터링을 사용할 수 있다.
- 성능 테스트 자동화 : CI/CD 및 자동화 도구와 원활하게 통합되어 성능 테스트 자동화가 가능하도록 지원한다.
- 카오스 및 복원력 테스트 : 카오스 실험의 일부로 트래픽을 시뮬레이션하거나, 테스트에서 트리거, 다양한 유형의 결함을 주입할 수 있다.
- 인프라 테스트 : k6 새로운 프로토콜에 대한 지원 추가하거나 특정 클라이언트를 사용해 인프라 내 개별 시스템을 직접 테스트할 수 있다.
2. Installation
- K6 는 linux, mac, window 를 지원한다.
- Docker 컨테이너로 실행할 수 있다.
(1) Fedora/CentOS
sudo dnf install <https://dl.k6.io/rpm/repo.rpm>
sudo dnf install k6
(2) Mac OS
brew install k6
(3) Docker
docker pull grafana/k6
3. K6 실행하기
(1) script.js 파일 생성 및 기본 코드 작성
import http from 'k6/http';
import { sleep } from 'k6';
export default function () {
http.get('<https://test.k6.io>');
sleep(1);
}
(2) k6 커맨드 실행
- 옵션 재정의 방법 (e.g. vuser, duration) : https://k6.io/blog/learning-js-through-load-testing/#task-1-override-options
$ k6 run script.js
docker run --rm -i grafana/k6 run - <script.js
(3) 실행 결과 (표준 출력)
- data_received : 전달 받은 데이터 양
- data_sent : 전달된 데이터 양
- http_req_blocked : 요청을 시작하기 전 블록된 시간
- http_req_connecting : 원격 호스트와 TCP connection 을 수립하기 위한 시간
- http_req_duration : 요청을 위한 총 시간(http_req_sending + http_req_waiting + http_req_receiving)
- http_req_failed : 설정된 응답 콜백에 따른 실패한 요청의 비율
- http_req_receiving : 원격 호스트에서 응답 데이터를 수신하는데 걸린 시간이다.
- http_req_tls_handshaking : 원격 호스트와 TLS 세션 핸드셰이킹에 소요된 시간
- http_req_waiting : 원격 호스트의 응답을 기다리는 데 걸린 시간 (TTFB)
- http_reqs : k6가 생성한 총 HTTP 요청 수
- iteration_duration : setup 및 teardown 에 소요된 시간을 포함하여 하나의 전체 반복을 완료하는 데 걸리는 시간
- iterations : VU가 JS 스크립트(기본 함수)를 실행한 총 횟수
- vus : 현재 활성된 VUser 수
- vus_max : 가능한 최대 VUser 수
(4) 실행 결과 출력하기
- —out 옵션을 통해 원하는 대상 지정이 가능하다.
k6 run \\
--out json=test.json \\
script01.json
{
"metric": "vus",
"type": "Point",
"data": {
"time": "2024-12-04T16:28:24.627428+09:00",
"value": 1,
"tags": {}
}
}
{
"type": "Metric",
"data": {
"name": "vus_max",
"type": "gauge",
"contains": "default",
"thresholds": [],
"submetrics": null
},
"metric": "vus_max"
}
{
"metric": "vus_max",
"type": "Point",
"data": {
"time": "2024-12-04T16:28:24.627428+09:00",
"value": 1,
"tags": {}
}
}
...
Reference
'test' 카테고리의 다른 글
docker -compose 기반 로컬 DB 모니터링 구축(mysqld-exporter + prometheus + grafana) (0) | 2025.01.25 |
---|---|
Testcontainers 삽질1 : 테스트 컨테이너 재사용 (0) | 2025.01.13 |