一括実行開始時に別の一括実行が行われており、クラウドブラウザ/端末が使用数上限に達している場合、テストは開始されず失敗扱いとなってしまいます。
この点は課題として認識しており、以下に起票しています。
クラウド端末がいっぱいの場合はすぐに失敗するのではなくしばらく待ちキューに入れて欲しい
回避策として、使用可能なクラウド端末の台数を取得するMagicPod Web API GET /v1.0/{organization_name}/cloud-devices/を使用する方法を紹介します。
CIツールでテスト実行を自動化している場合、テストを実行する前に、空いているクラウド端末数を取得するスクリプトを追加することで、テストの実行開始を待機させることができます。
下記は、GitHub Actionsでテストを実行するシェルスクリプトの作成例です。
#!/bin/bash -e
OS=mac
FILENAME=magicpod-api-client
curl -L "https://app.magicpod.com/api/v1.0/magicpod-clients/api/${OS}/latest/" -H "Authorization: Token ${MAGICPOD_API_TOKEN}" --output ${FILENAME}.zip
unzip -q ${FILENAME}.zip
export MAGICPOD_ORGANIZATION=<MagicPod組織名>
export MAGICPOD_PROJECT=<MagicPodプロジェクト名>
# クラウド端末の空きが出るまで待機する (最大10分)
DEVICE_TYPE=browser # 必要に応じて'mobile_app'に変更
API_ENDPOINT="https://app.magicpod.com/api/v1.0/${MAGICPOD_ORGANIZATION}/cloud-devices/"
MAX_WAIT_TIME=600
POLL_INTERVAL=30
START_TIME=$(date +%s)
echo "Waiting for cloud device availability..."
while true; do
CURRENT_TIME=$(date +%s)
ELAPSED_TIME=$((CURRENT_TIME - START_TIME))
if [ $ELAPSED_TIME -ge $MAX_WAIT_TIME ]; then
echo "Timeout: No cloud device available after 10 minutes"
exit 1
fi
RESPONSE=$(curl -s -H "Authorization: Token ${MAGICPOD_API_TOKEN}" "${API_ENDPOINT}")
AVAILABLE=$(echo "$RESPONSE" | jq -r ".${DEVICE_TYPE}.batch_test_run.available")
if [ "$AVAILABLE" -ge 1 ]; then
echo "Cloud device is available. Starting test run..."
break
fi
echo "No available device. Retrying in ${POLL_INTERVAL} seconds..."
sleep $POLL_INTERVAL
done
# Run batch test
TEST_SETTING_NUMBER=<MagicPod一括実行設定番号>
./magicpod-api-client batch-run -S ${TEST_SETTING_NUMBER}GitHub Actionsとの連携に関する詳細は下記を参照してください。
MagicPod Web APIのレスポンス内容などの詳細は下記を参照してください。
なお、スタンダードプランの場合テスト一括実行用のクラウド端末数はデフォルトで2台ですが、オプションで追加することが可能です。
ご不明点があればお気軽にお問い合わせください。