Device Farm で必要な機能を使用して Appium ベースのテストを高速化する - AWS Device Farm

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Device Farm で必要な機能を使用して Appium ベースのテストを高速化する

Appium を使用すると、標準モードのテストスイートが非常に遅くなることがあります。これは、Device Farm がデフォルト設定を適用しており、ユーザーの希望する Appium 環境の使用方法について想定していないためです。これらのデフォルトは業界のベストプラクティスを中心にして構築されていますが、ご利用状況によっては適応しない場合があります。Appium サーバーのパラメーターを微調整するには、テスト仕様のデフォルト Appium 機能を調整してください。例えば、以下では、usePrebuildWDA 機能を iOS テストスイートで true に設定して、初期開始時間を高速化します:

phases: pre_test: - # ... Start up Appium - >- appium --log-timestamp --default-capabilities "{\"usePrebuiltWDA\": true, \"derivedDataPath\":\"$DEVICEFARM_WDA_DERIVED_DATA_PATH\", \"deviceName\": \"$DEVICEFARM_DEVICE_NAME\", \"platformName\":\"$DEVICEFARM_DEVICE_PLATFORM_NAME\", \"app\":\"$DEVICEFARM_APP_PATH\", \"automationName\":\"XCUITest\", \"udid\":\"$DEVICEFARM_DEVICE_UDID_FOR_APPIUM\", \"platformVersion\":\"$DEVICEFARM_DEVICE_OS_VERSION\"}" >> $DEVICEFARM_LOG_DIR/appiumlog.txt 2>&1 &

Appium の機能は、シェルエスケープされた引用JSON符構造である必要があります。

次の Appium 機能は、パフォーマンス向上の一般的なソースとなります:

noReset および fullReset

これらの 2 つの機能は互いに排他的となっており、各セッションの完了後に Appium の動作を記述します。noResettrue に設定されている場合、Appium サーバーは Appium セッションが終了してもアプリケーションからデータを削除せず、実質的にいかなるクリーンアップも行いません。セッションが終了した後、fullReset が、デバイスからすべてのアプリケーションデータをアンインストールおよびクリアします。詳細については、Appium ドキュメントの「ストラテジーを初期化する」を参照してください。

ignoreUnimportantViews (Android のみ)

Appium に、テスト用の関連するビューにのみ Android UI 階層を圧縮するように指示し、ある特定要素の検索を高速化します。ただし、UI レイアウトの階層が変更されているため、一部の XPathベースのテストスイートが壊れる可能性があります。

skipUnlock (Android のみ)

現在設定されているPINコードがないことを Appium に通知します。これにより、スクリーンオフイベントやその他のロックイベント後のテストが高速化されます。

webDriverAgentUrl (iOS のみ)

Appium に、必須の iOS 依存関係である がすでに実行されておりwebDriverAgent、指定された でHTTPリクエストを受け入れることができると仮定するように指示しますURL。webDriverAgent がまだ起動していない場合、Appium がテストスイートの開始時に webDriverAgent を起動するまでに時間がかかることがあります。自分でwebDriverAgent を起動して Appium の起動時に webDriverAgentUrlhttp://localhost:8100 に設定すると、テストスイートをより速く起動できます。この機能は useNewWDA 機能と一緒に使うべきではないことに注意してください。

次のコードを使用して、デバイスのローカルポート 8100 にあるテスト仕様ファイルから webDriverAgent を開始し、テストホストのローカルポート 8100 に転送できます (これにより、webDriverAgentUrl の値をhttp://localhost:8100 に設定できます)。このコードは、Appium と webDriverAgent 環境変数を設定するコードが定義されたあと、インストール段階で実行する必要があります:

# Start WebDriverAgent and iProxy - >- xcodebuild test-without-building -project /usr/local/avm/versions/$APPIUM_VERSION/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -derivedDataPath $DEVICEFARM_WDA_DERIVED_DATA_PATH -destination id=$DEVICEFARM_DEVICE_UDID_FOR_APPIUM IPHONEOS_DEPLOYMENT_TARGET=$DEVICEFARM_DEVICE_OS_VERSION GCC_TREAT_WARNINGS_AS_ERRORS=0 COMPILER_INDEX_STORE_ENABLE=NO >> $DEVICEFARM_LOG_DIR/webdriveragent_log.txt 2>&1 & iproxy 8100 8100 >> $DEVICEFARM_LOG_DIR/iproxy_log.txt 2>&1 &

次に、テスト仕様ファイルに次のコードを追加して、webDriverAgent が正常に起動したことを確認できます。Appium が正常に起動したことを確認したら、テスト前のフェーズの最後にこのコードを実行する必要があります:

# Wait for WebDriverAgent to start - >- start_wda_timeout=0; while [ true ]; do if [ $start_wda_timeout -gt 60 ]; then echo "WebDriverAgent server never started in 60 seconds."; exit 1; fi; grep -i "ServerURLHere" $DEVICEFARM_LOG_DIR/webdriveragent_log.txt >> /dev/null 2>&1; if [ $? -eq 0 ]; then echo "WebDriverAgent REST http interface listener started"; break; else echo "Waiting for WebDriverAgent server to start. Sleeping for 1 seconds"; sleep 1; start_wda_timeout=$((start_wda_timeout+1)); fi; done;

Appium がサポートする機能の詳細については、Appium ドキュメントの「Appium で必要な機能」を参照してください。

テストスイートを拡張してテストを最適化するその他の方法については、「」を参照してくださいDevice Farm でのカスタムテスト環境の拡張