체크
k6 체크(Checks) — 응답을 검증하는 첫 관문
부하 테스트에서 요청이 정말 제대로 응답했는지 확인하고 싶을 때가 많아요. k6의 체크(checks) 는 테스트 안에서 불리언 조건을 검증하는 도구인데, 일반적인 테스트 프레임워크의 assert와 비슷하면서도 결정적으로 다른 점이 하나 있어요. 이번 글에서는 체크가 무엇이고, 어떻게 쓰고, 왜 임계값(thresholds)과 함께 써야 하는지 알아볼게요.
출처: k6 공식 문서 — Checks 원본 URL: https://grafana.com/docs/k6/latest/using-k6/checks/
체크란 무엇인가
체크는 테스트 안에서 불리언 조건을 검증해요. 예를 들어 POST 요청이 response.status == 201을 만족하는지, 응답 본문 크기가 일정한지 등을 검증할 때 씁니다. 명칭은 많은 테스트 프레임워크의 assert와 비슷하지만, 체크가 실패해도 테스트가 중단되거나 실패 상태로 끝나지는 않아요. 대신 k6는 테스트가 계속되는 동안 실패한 체크의 비율을 계속 추적합니다.
체크 하나가 만들어지면 그것에 해당하는 rate 메트릭이 생성돼요. 체크가 실패했을 때 테스트를 중단하거나 실패시키고 싶다면, 임계값(Threshold) 과 조합하면 됩니다.
HTTP 응답 코드 체크
가장 흔한 예로, 응답 상태 코드가 200인지 확인해 볼게요.
import { check } from 'k6';
import http from 'k6/http';
export default function () {
const res = http.get('http://test.k6.io/');
check(res, {
'is status 200': (r) => r.status === 200,
});
}
응답 본문의 텍스트 체크
응답 본문에 원하는 텍스트가 들어 있는지도 확인할 수 있어요. r.body.includes(...)로 본문에 특정 문자열이 포함됐는지 검증합니다.
import { check } from 'k6';
import http from 'k6/http';
export default function () {
const res = http.get('http://test.k6.io/');
check(res, {
'verify homepage text': (r) =>
r.body.includes('Collection of simple web-pages suitable for load testing'),
});
}
응답 본문 크기 체크
응답 바이트 수를 정확히 비교해서 검증할 수도 있어요.
import { check } from 'k6';
import http from 'k6/http';
export default function () {
const res = http.get('http://test.k6.io/');
check(res, {
'body size is 11,105 bytes': (r) => r.body.length == 11105,
});
}
체크 통과 비율 확인하기
스크립트에 체크가 있으면 요약 보고서에 통과한 체크 수가 나타나요. 체크 빌트인 메트릭은 checks_total, checks_succeeded, checks_failed 세 개로 나뉩니다.
$ k6 run script.js
...
✓ is status 200
...
checks_total.......................: 1 1.23/s
checks_succeeded...................: 100.00% 1 out of 1
checks_failed......................: 0.00% 0 out of 1
...
이 예제에서 "is status 200" 체크는 호출될 때마다 100% 성공했어요.
체크 여러 개 추가하기
check 함수의 객체에 조건을 여러 개 넣으면 한 번에 여러 체크를 할 수 있어요.
import { check } from 'k6';
import http from 'k6/http';
export default function () {
const res = http.get('http://test.k6.io/');
check(res, {
'is status 200': (r) => r.status === 200,
'body size is 11,105 bytes': (r) => r.body.length == 11105,
});
}
실행하면 출력이 대략 이렇게 나와요.
$ k6 run checks.js
...
✓ is status 200
✓ body size is 11,105 bytes
...
checks_total.......................: 2 2.34/s
checks_succeeded...................: 100.00% 2 out of 2
checks_failed......................: 0.00% 0 out of 2
...
참고 체크가 실패해도 스크립트는 계속 실행되고 'failed' 종료 상태를 돌려주지 않아요. 체크 결과로 테스트 전체를 실패시키고 싶다면 체크를 임계값(thresholds) 과 조합해야 해요. 이는 k6를 CI 파이프라인에 통합하거나 성능 테스트를 스케줄링할 때 알림을 받는 등 특정 상황에서 특히 유용합니다.