본문 바로가기
기타

[bash] 간단한 부하테스트 script

by 초특급하품 2019. 12. 12.

부하 테스트를 할 수 있는 여러 좋은 툴들이 많지만 bash도 연습할 겸 로컬에서 실행시킬 간단한 스크립트를 만들었다.

 

#!/bin/bash

TPS=$1
URL=$2

LOG=./result.log

function exit_trap() {
  echo -e "\nHTTP CODE"
  cut -f1 ${LOG} | sort | uniq -c | sort -nr

  echo "RESPONSE TIME"
  cut -f2 ${LOG} | awk '{ sum += $1 } END { print sum / NR}'
  exit 0
}

trap exit_trap INT

for((i=0;;i++))
do
  echo -en "\r$i sec"
  for _ in `seq 1 $TPS`
  do
    curl -o /dev/null -s -w '%{http_code}\t%{time_total}' "${URL}" | awk 1  >> ${LOG} &
  done
  sleep 1
done

 

TPS를 인자로 받아 background로 curl 요청을 해당 수만큼 실행시키고 1초씩 쉬게 했다. 

curl에 여러 옵션이 붙었는데 -o 옵션으로 output을 버리고, -s로 progress meter도 숨겼다. -w 옵션으로는 요청의 응답 http code와 시간만 출력하도록 했다. http_codetime_total 은 curl에서 지원하는 format variables이다. 

여기까지 하면 background로 실행되는 과정에서 http_code와 time_total이 tap(\t)으로 연결된 하나의 문자열로 인식되지 않고 쪼개지는 현상이 발생한다. 하나의 문자열로 취급하기 위해 불필요해 보이지만 pipe를 한번 더 태운 후 log 파일에 기록했다.

 

마지막으로 인터럽트 시그널을 trap 해서 log 파일에 기록한 http code 분포와 평균 응답 시간을 출력했다.

 

실행은 아래와 같이 TPS와 대상 API를 넘기면 된다.

./run.sh 100 localhost:4000

'기타' 카테고리의 다른 글

간단한 파일 대칭키 암호화/복호화  (0) 2019.12.24
MySQL DATE INTERVAL 함수 함정  (1) 2019.12.13
[bash] sed 사용 설명서  (0) 2019.12.01
[bash] awk 사용 설명서  (0) 2019.11.21
삭제된 라인의 git commit 찾기  (0) 2019.11.20

댓글