

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

# 自訂測試環境執行的最佳實務
<a name="custom-test-environments-best-practices"></a>

 下列主題涵蓋搭配 Device Farm 使用自訂測試執行的建議最佳實務。

**執行組態**
+  盡可能**依賴 Device Farm 受管軟體和 API 功能來執行組態**，而不是透過測試規格檔案中的 shell 命令套用類似的組態。這包括測試主機和裝置的組態，因為這在測試主機和裝置之間將更具永續性和一致性。

   雖然 Device Farm 鼓勵您盡可能地自訂測試規格檔案以執行測試，但隨著更自訂的命令新增至測試規格檔案，測試規格檔案可能會隨著時間而變得難以維護。使用 Device Farm 受管軟體 （透過 中的工具，例如 ` devicefarm-cli`和預設可用工具`$PATH`)，並使用 受管功能 （例如 [https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_ScheduleRunConfiguration.html#devicefarm-Type-ScheduleRunConfiguration-deviceProxy](https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_ScheduleRunConfiguration.html#devicefarm-Type-ScheduleRunConfiguration-deviceProxy)請求參數），透過將維護責任轉移到 Device Farm 本身來簡化測試規格檔案。

**測試規格和測試套件程式碼**
+  **請勿使用絕對路徑或依賴測試規格檔案或測試套件程式碼中的特定次要版本**。Device Farm 會將例行更新套用至選取的測試主機及其包含的軟體版本。使用特定或絕對路徑 （例如 ` /usr/local/bin/python` 而非 `python`) 或需要特定次要版本 （例如 Node.js `20.3.1` 而非僅 ` 20`) 可能會導致您的測試找不到所需的可執行檔 / 檔案。

   作為自訂測試執行的一部分，Device Farm 會設定各種環境變數和 `$PATH`變數，以確保測試在我們的動態環境中具有一致的體驗。如需詳細資訊，請參閱 [自訂測試環境的環境變數](custom-test-environment-variables.md) 和 [自訂測試環境中支援的軟體](custom-test-environments-hosts-software.md)。
+  **在測試執行期間，將產生的或複製的檔案儲存在暫存目錄中。 **今天，我們確保使用者在測試執行期間可以存取臨時目錄 (`/tmp`) （除了受管目錄之外，例如 `$DEVICEFARM_LOG_DIR`)。由於服務或使用中的作業系統的需求，使用者可存取的其他目錄可能會隨著時間而變更。
+  **將您的測試執行日誌儲存至 `$DEVICEFARM_LOG_DIR`**。這是為您的執行提供的預設成品目錄，用於新增執行日誌/成品。我們提供的[測試規格範例](custom-test-environment-test-spec.md#custom-test-environment-test-spec-example)預設會使用此目錄做為成品。
+  **確保您的命令在測試規格的 階段期間失敗時傳回非零代碼**。 `test`我們會檢查`test`階段期間叫用的每個 shell 命令是否有非零的結束碼，以判斷您的執行是否失敗。您應該確保邏輯或測試架構會傳回所有所需案例的非零結束程式碼，這可能需要額外的組態。

   例如，某些測試架構 （例如 JUnit5) 不會將零測試執行視為失敗，這會導致偵測到您的測試已成功執行，即使未執行任何測試也一樣。使用 JUnit5 作為範例，您需要指定命令列選項`--fail-if-no-tests`，以確保此案例以非零的結束代碼結束。
+  **檢閱軟體與您將用於測試執行的裝置作業系統版本和測試主機版本的相容性**。例如，在測試軟體架構 （即 Appium) 中，有些功能可能無法在所測試裝置的所有作業系統版本上如預期般運作。

**安全**
+  ** 避免在測試規格檔案中存放或記錄敏感變數 （例如 AWS 金鑰）。 **測試規格檔案、測試規格產生的指令碼和測試規格指令碼的日誌都會在測試執行結束時以可下載成品的形式提供。這可能會導致帳戶中具有測試執行讀取存取權的其他使用者秘密意外暴露。