

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

# 必要な機能を通じた Device Farm のAppiumベースのテストの高速化
<a name="custom-test-environments-extending-speed"></a>

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 の動作を記述します。`noReset` が `true` に設定されている場合、Appium サーバーは Appium セッションが終了してもアプリケーションからデータを削除せず、実質的にいかなるクリーンアップも行いません。セッションが終了した後、`fullReset` が、デバイスからすべてのアプリケーションデータをアンインストールおよびクリアします。詳細については、Appium ドキュメントの「[ストラテジーを初期化する](http://appium.io/docs/en/writing-running-appium/other/reset-strategies/)」を参照してください。

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

`skipUnlock` (Android のみ)  
今設定されている PIN コードがないことを Appium に通知し、スクリーンオフイベントまたはその他のロックイベント後にテストを高速化します。

`webDriverAgentUrl` (iOS のみ)  
重要な iOS 依存関係 `webDriverAgent` がすでに実行され、指定された URL で HTTP リクエストを受け付けることができると想定するように Appium に指示します。`webDriverAgent` がまだ起動していない場合、Appium がテストスイートの開始時に `webDriverAgent` を起動するまでに時間がかかることがあります。自分で`webDriverAgent` を起動して Appium の起動時に `webDriverAgentUrl` を `http://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 で必要な機能](http://appium.io/docs/en/writing-running-appium/caps/)」を参照してください。

テストスイートを拡張してテストを最適化するその他の方法については、「[Device Farm でのカスタムテスト環境の拡張](custom-test-environments-extending.md)」を参照してください。