/

curlでリクエストのレスポンス時間の平均値を取る

hone-choko.comにリクエストを投げる
hone-choko.comにリクエストを投げる

curlでURLにリクエストを10回投げ、レスポンス時間の平均値を表示するシェルスクリプトです。

シェルスクリプトの内容

#!/bin/bash

if [ "$#" -lt 1 ] || [ "$#" -gt 3 ]; then
  echo "Usage: $0 <url> [username] [password]"
  exit 1
fi

URL="$1"
USERNAME="${2:-}"
PASSWORD="${3:-}"

TOTAL_TIME=0
COUNT=10

for i in $(seq 1 $COUNT); do
  if [ -n "$USERNAME" ] && [ -n "$PASSWORD" ]; then
    RESPONSE=$(curl -s -w "%{http_code} %{time_total}\n" -o /dev/null -u "$USERNAME:$PASSWORD" "$URL")
  else
    RESPONSE=$(curl -s -w "%{http_code} %{time_total}\n" -o /dev/null "$URL")
  fi

  HTTP_CODE=$(echo "$RESPONSE" | awk '{print $1}')
  TIME_TOTAL=$(echo "$RESPONSE" | awk '{printf "%.5f", $2}')
  TOTAL_TIME=$(echo "scale=5; $TOTAL_TIME + $TIME_TOTAL" | bc)

  echo "Run $i: http_code = $HTTP_CODE, time_total = $TIME_TOTAL sec"

  sleep 0.1
done

T=$(echo "scale=5; $TOTAL_TIME" | bc | awk '{printf "%.5f\n", $0}')
A=$(echo "scale=5; $TOTAL_TIME / $COUNT" | bc | awk '{printf "%.5f\n", $0}')

echo "Total time: $T seconds"
echo "Avarage time: $A seconds"

使い方

# 上記のシェルスクリプトの内容を記述
$ vim curl.sh

# 実行権限の追加
$ chmod +x ./curl.sh

# 実行
$ ./curl.sh example.com

# ベーシック認証がある場合は下記
$ ./curl.sh basic.example.com user password

サイトによっては連続してアクセスすると負荷がかかりブロックされてしまうかもしれないので注意してください。

以上です。