curlでリクエストのレスポンス時間の平均値を取る
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
サイトによっては連続してアクセスすると負荷がかかりブロックされてしまうかもしれないので注意してください。
以上です。