

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 透過所需的功能加速 Device Farm 中的 Appium 型測試
<a name="custom-test-environments-extending-speed"></a>

使用 Appium 時，您可能會發現標準模式測試套件非常慢。這是因為 Device Farm 會套用預設設定，而且不會對您想要如何使用 Appium 環境做出任何假設。雖然這些預設值是以產業最佳實務為基礎建置，但可能不適用於您的情況。若要微調 Appium 伺服器的參數，您可以調整測試規格中的預設 Appium 功能。例如，以下將 iOS 測試套件`true`中的 `usePrebuildWDA`功能設定為 ，以加快初始開始時間：

```
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`  
這兩個功能是互斥的，描述每個工作階段完成後 Appium 的行為。當 `noReset` 設為 時`true`，Appium 伺服器不會在 Appium 工作階段結束時從您的應用程式移除資料，實際上不會進行任何清理。 會在工作階段關閉後從裝置`fullReset`解除安裝並清除所有應用程式資料。如需詳細資訊，請參閱 Appium 文件中的[重設策略](http://appium.io/docs/en/writing-running-appium/other/reset-strategies/)。

`ignoreUnimportantViews` （僅限 Android)  
指示 Appium 僅將 Android UI 階層壓縮至測試*的相關*檢視，以加速特定元素查詢。不過，這可能會破壞某些以 XPath 為基礎的測試套件，因為 UI 配置的階層已變更。

`skipUnlock` （僅限 Android)  
通知 Appium 目前未設定 PIN 碼，這會加速螢幕關閉事件或其他鎖定事件之後的測試。

`webDriverAgentUrl` （僅限 iOS)  
指示 Appium 假設基本 iOS 相依性 已在執行`webDriverAgent`中，並可用於在指定的 URL 接受 HTTP 請求。如果 `webDriverAgent` 尚未啟動並執行，則在測試套件開始時，Appium 可能需要一些時間才能啟動 `webDriverAgent`。如果您在啟動 Appium `http://localhost:8100`時`webDriverAgent`自行啟動並將 `webDriverAgentUrl`設定為 ，您可以更快地啟動測試套件。請注意，此功能不應與 `useNewWDA` 功能搭配使用。  
您可以使用下列程式碼`webDriverAgent`從裝置本機連接埠 上的測試規格檔案開始`8100`，然後將其轉送至測試主機的本機連接埠 `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)。