성능테스트 도구 탐색

  • JavaScript로 테스트 시나리오를 짤 수 있는 도구를 탐색
  • 몇 년 전 사용했던 Artillery와 새로 알게 된 k6를 놓고 고민
  • 미미하게 구글링 건수가 많고 (37,000건 vs 1,800건), grafana 대시보드가 멋진 k6를 선택
  • k6 프로젝트의 오너가 grafana-labs라서 grafana와의 연계가 좋을 수 밖에 없음

이런 멋진 대시보드를 실시간으로 볼 수 있음

 

사용법

  • k6를 실행하려면 influxDB와 grafana가 있어야 함
  • k6 + influxDB + grafana를 컨테이너로 실행하는 것이 가장 간편
  • k6 소스레포에서 docker-compose.yml 파일을 제공함  
git clone https://github.com/grafana/k6 && cd k6 
git submodule update --init 
docker-compose up -d influxdb grafana
docker-compose run -v $PWD:/scripts k6 run /scripts/myscript.js

 

테스트 스크립트 작성

  • k6 자체는 go 언어로 작성됨
  • k6에서 실행되는 테스트 스크립트는 JavaScript로 작성함
  • 테스트 스크립트는 반드시 default function을 export 해야 함
  • 해당 function을 k6가 생성하는 VU(virtual user)들이 실행함
import http from "k6/http";

export default function() {
    let response = http.get("https://test-api.k6.io");
};

 

실행 팁

  • grafana 커뮤니티에서 만든 대시보드들 중 4411 추천
  • k6 성능테스트 도중 "The flush operation took higher than the expected set push interval" 에러를 만남
    ==> influxDB에 테스트 지표를 write 하는 시간이 지연되어 발생하는 에러
    ==> 테스트 결과 분석에 필요한 지표만 SystemTags로 지정해서 influxDB의 지표 수집 부담을 줄여준다
export let options = { 
   vus: 4, 
   stages: [ 
     { duration: "30s", target: 32 }, 
     { duration: "60s", target: 32 }, 
     { duration: "30s", target: 4 }, 
   ], 
   systemTags: ['status', 'http_req_duration'], // <== 이거!
};

 

Ref

https://k6.io/blog/k6-loves-grafana/

  • k6 실행 방법과 대시보드 설치 방법을 간결하게 설명

https://github.com/grafana/k6

  • k6 소스레포 (README 내용 좋음)

https://k6.io/docs/

  • k6 공식 문서

 

Posted by ingeeC
,