背景
- とあるプロジェクトで負荷試験を実施する際、Saas製品に4万件以上のデータを登録する必要が発生した
- UIでの登録は一生かかっても終わらない。困った
- 今後も使いそうなのでメモ
行なったこと
- Saas製品が公開しているREST APIを使用してデータをpost
Postmanのコレクションランナー
- ググると出てきたのがPostmanのコレクションランナー。しかし、並列実行で困った
- 時間短縮のため、並列でpostしたいが、jobを複数用意するのが面倒
- 並列実行すると回数制限に引っかかる(無料版)
shell
- 他に方法はないものかChat GPTに質問。最終的に以下のshellを作成した
- パラメータでpost回数を指定可能とした
- shellを複数同時実行することで並列実行可能とした
- 10並列(4,000件/shell)。2時間程度で完了
# チェック: パラメータが指定されているか確認
if [ "$#" -ne 1 ]; then
echo "Usage: $0 <count>"
exit 1
fi
# パラメータの取得
COUNT=$1
# URL, メソッド, ヘッダー, ボディを設定
URL="エンドポイントURL"
METHOD="POST"
ACCEPT="application/json"
CONTENT_TYPE="application/json"
AUTHORIZATION="Bearer トークン"
BODY='{
bodyの中身
}'
# ループでリクエストを送信
for ((i=1;i<=COUNT;i++))
do
echo "Sending request $i..."
curl -X $METHOD $URL \
-H "Accept: $ACCEPT" \
-H "Content-Type: $CONTENT_TYPE" \
-H "Authorization: $AUTHORIZATION" \
-d "$BODY"
echo -e "\nRequest $i sent."
done
- 並列実行用shell
# バッチ数とパラメータを設定
BATCH_COUNT=3
COUNT=5000
# 並列でバッチを実行(実行毎にログファイル作成)
for ((i=1;i<=BATCH_COUNT;i++))
do
LOG_FILE="batch_end_$i.log"
echo "Starting batch $i with parameter $PARAMETER..."
[batch file path] $COUNT > $LOG_FILE 2>&1 &
done
# 全てのバッチが終了するのを待つ
wait
echo "All batches completed."
最後に
- トークン取得もシェルで書ければ更に便利
- post後データに更にpatchを投げるshellも作成した