0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

APIで大量データをpostする

Last updated at Posted at 2025-01-28

背景

  • とあるプロジェクトで負荷試験を実施する際、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も作成した
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?