HTTP 요청
k6 HTTP 요청 — 부하 테스트의 가장 기본기
부하 테스트가 결국 하는 일은 서버에 요청을 쏘는 거라, k6에서 HTTP 요청을 어떻게 날리는지가 가장 기초가 돼요. GET·POST 같은 기본 메서드부터 배치 요청, 리다이렉트 처리, URL을 태그로 묶는 테크닉까지 알아두면 실제 부하를 자연스럽게 흘려보낼 수 있습니다. 이번 글에서는 k6의 HTTP 요청 작성법을 하나씩 살펴볼게요.
출처: k6 공식 문서 — HTTP Requests 원본 URL: https://grafana.com/docs/k6/latest/using-k6/http-requests/
HTTP 요청 만들기
GET 요청은 이렇게 작성해요.
import http from 'k6/http';
export default function () {
http.get('http://test.k6.io');
}
조금 더 복잡한 예로, 이메일/비밀번호 인증 페이로드를 담은 POST 요청을 보내 볼게요.
import http from 'k6/http';
export default function () {
const url = 'http://test.k6.io/login';
const payload = JSON.stringify({
email: 'aaa',
password: 'bbb',
});
const params = {
headers: {
'Content-Type': 'application/json',
},
};
http.post(url, payload, params);
}
사용 가능한 메서드
k6의 k6/http 모듈은 여러 HTTP 메서드를 제공해요.
| 이름 | 설명 | | batch() | 여러 HTTP 요청을 병렬로 보냅니다(브라우저가 하는 것처럼). | | del() | HTTP DELETE 요청을 보냅니다. | | get() | HTTP GET 요청을 보냅니다. | | head() | HTTP HEAD 요청을 보냅니다. | | options() | HTTP OPTIONS 요청을 보냅니다. | | patch() | HTTP PATCH 요청을 보냅니다. | | post() | HTTP POST 요청을 보냅니다. | | put() | HTTP PUT 요청을 보냅니다. |
리다이렉트 처리
리다이렉트(redirect)를 제어하는 방법은 두 가지예요.
maxRedirects옵션으로 리다이렉트 횟수를 전역적으로 설정합니다. 자세한 내용은 Max redirects를 참고하세요.- 특정 요청에 대해서만
Params.redirects속성으로 횟수를 지정할 수 있는데, 이 값은maxRedirects옵션을 덮어써요. 자세한 내용은 Params를 참고하세요.
URL을 하나의 태그로 묶기
URL에 동적인 값(예: 게시글 ID)이 들어가면 요청마다 URL이 달라져 메트릭이 흩어져 보일 수 있어요. 이때 tags.name으로 URL을 묶으면 하나의 항목으로 집계할 수 있습니다.
import http from 'k6/http';
export default function () {
for (let id = 1; id <= 100; id++) {
http.get(`http://example.com/posts/${id}`, {
tags: { name: 'PostsItemURL' },
});
}
}
// tags.name=\"PostsItemURL\",
// tags.name=\"PostsItemURL\",
이 코드는 JSON 출력을 대략 이런 모양으로 만들어 줘요. 동적 URL이 많아도 태그가 같으면 하나의 그룹으로 처리되므로, 요약에서 특정 종류의 요청 성능을 한눈에 비교하기 수월해집니다.