k6 retry와 sleep

2024. 4. 5. 13:52Programming/web

k6를 사용하다보니 request fail 횟수가 드문드문 나와서 retry를 줬을때는 request fail이 얼마나 발생하는지 알고 싶어졌다.

k6 자체적으로 retry를 제공해 주지는 않는 것 같고 아래와 같이 custom function을 만들어야 하는 것 같다.

 

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

function httpGet(url, params) {
   var res;
   for (var retries = 3; retries > 0; retires--) {
       res = http.get(url, params)
       if (res.status != 400 && res.status < 500){
           return res;
       }
       sleep(1);
   }
   return res;
}
 
export default function () {
   let params = {
       timeout: 6000
   };

   const url = "http://testurl"
   httpGet(url, params);
}

 

httpGet이란 함수를 새롭게 만들고 해당 함수에서는 retry 횟수만큼 http.get을 호출한다. 정상 호출인 경우는 response를 리턴하고 400이나 500 상황인 경우는 1초 sleep 한 후 재 호출 한다. 이렇게 retry 만큼 호출해도 400이나 500이 return되면 최종 request fail을 리턴하게 된다.

 

이런 식으로 코드를 수정하니 에러율이 확 준 걸 확인할 수 있었다.