

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

# 教學課程：建立使用 測試 iOS 應用程式的管道 AWS Device Farm
<a name="tutorials-codebuild-devicefarm-S3"></a>

 您可以使用 AWS CodePipeline 輕鬆設定持續整合流程，在每次來源儲存貯體變更時測試您的應用程式。本教學課程示範如何建立及設定管道，以從 S3 儲存貯體測試您建置的 iOS 應用程式。管道會透過 Amazon CloudWatch Events 偵測已儲存變更的到達，然後使用 [Device Farm](https://docs.aws.amazon.com/devicefarm/latest/developerguide/welcome.html) 測試建置的應用程式。

**重要**  
在建立管道的過程中，CodePipeline 將使用客戶提供的 S3 成品儲存貯體來製作成品。（這與用於 S3 來源動作的 儲存貯體不同。) 如果 S3 成品儲存貯體位於與管道帳戶不同的帳戶中，請確定 S3 成品儲存貯體由 所擁有 AWS 帳戶 ，安全且可靠。

**重要**  
您在此程序中新增至管道的許多動作都涉及您在建立管道之前需要建立 AWS 的資源。來源動作 AWS 的資源一律必須在您建立管道 AWS 的相同區域中建立。例如，如果您在美國東部 （俄亥俄） 區域建立管道，則 CodeCommit 儲存庫必須位於美國東部 （俄亥俄） 區域。  
您可以在建立管道時新增跨區域動作。跨區域動作 AWS 的資源必須位於您計劃執行動作的相同 AWS 區域中。如需詳細資訊，請參閱[在 CodePipeline 中新增跨區域動作](actions-create-cross-region.md)。

您可以透過使用您現有的 iOS 應用程式，或可使用[範例 iOS 應用程式](samples/s3-ios-test-1.zip)來試用。

**開始之前**

1. 登入 AWS Device Farm 主控台，然後選擇**建立新專案**。

1. 選擇您的專案。在瀏覽器中，複製新專案的 URL。URL 包含專案 ID。

1. 複製並保留此專案 ID。您可以在 CodePipeline 中建立管道時使用它。

   這裡有專案的 URL 範例。若要擷取專案 ID，請複製 `projects/` 後面的值。在此範例中，專案 ID 為 `eec4905f-98f8-40aa-9afc-4c1cfexample`。

   ```
   https://<region-URL>/devicefarm/home?region=us-west-2#/projects/eec4905f-98f8-40aa-9afc-4c1cfexample/runs
   ```

## 設定 CodePipeline 以使用您的 Device Farm 測試 (Amazon S3 範例）
<a name="codepipeline-configure-tests-S3"></a>

1. 建立或使用已啟用版本控制的 S3 儲存貯體。遵循[步驟 1：為您的應用程式建立 S3 來源儲存貯體](tutorials-simple-s3.md#s3-create-s3-bucket)中的說明，建立 S3 儲存貯體。

1. 在儲存貯體的 Amazon S3 主控台中，選擇**上傳**，然後依照指示上傳 .zip 檔案。

   您的範例應用程式必須封裝在 .zip 檔案中。

1. 若要建立您的管道及新增來源階段，請執行下列作業：

   1. 登入 AWS 管理主控台 並開啟 CodePipeline 主控台，網址為 https：//[https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/)。

   1. 在 **Welcome (歡迎)** 頁面、**Getting started (入門)** 頁面、或者 **Pipelines (管道)** 頁面上，選擇 **Create pipeline (建立管道)**。

   1. 在**步驟 1：選擇建立選項**頁面的**建立選項**下，選擇**建置自訂管道**選項。選擇**下一步**。

   1. 在**步驟 2：選擇管道設定**頁面上，在**管道名稱**中，輸入管道的名稱。

   1. CodePipeline 提供 V1 和 V2 類型的管道，其特性和價格有所不同。V2 類型是您可以在 主控台中選擇的唯一類型。如需詳細資訊，請參閱[管道類型](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-types-planning.html?icmpid=docs_acp_help_panel)。如需 CodePipeline 定價的資訊，請參閱 [定價](https://aws.amazon.com/codepipeline/pricing/)。

   1. 在 **Service role (服務角色)** 中，讓 **New service role (新服務角色)** 維持在選取狀態，然後讓 **Role name (角色名稱)** 維持不變。若您已擁有現有服務角色，您也可以選擇使用它。
**注意**  
如果您使用 2018 年 7 月之前建立的 CodePipeline 服務角色，則必須新增 Device Farm 的許可。若要這樣做，請開啟 IAM 主控台、尋找角色，然後將下列許可新增至角色的政策。如需詳細資訊，請參閱[將許可新增至 CodePipeline 服務角色](how-to-custom-role.md#how-to-update-role-new-services)。  

      ```
      {
           "Effect": "Allow",
           "Action": [
              "devicefarm:ListProjects",
              "devicefarm:ListDevicePools",
              "devicefarm:GetRun",
              "devicefarm:GetUpload",
              "devicefarm:CreateUpload",
              "devicefarm:ScheduleRun"
           ],
           "Resource": "*"
      }
      ```

   1. 將 **Advanced settings (進階設定)** 下的設定保留為預設值，然後選擇 **Next (下一步)**。

   1. 在**步驟 3：新增來源階段**頁面的**來源提供者**中，選擇 **Amazon S3**。

   1. 在 **Amazon S3 位置**中，輸入儲存貯體，例如 `my-storage-bucket`，以及物件金鑰，例如`s3-ios-test-1.zip`您的 .zip 檔案。

   1. 選擇**下一步**。

1. 在**步驟 4：新增建置階段**中，為您的管道建立預留位置建置階段。這可讓您在精靈中建立管道。在您使用精靈建立您的二階段管道之後，您便不再需要此預留位置建置階段。在完成管道後，便會刪除此第二階段，並會在步驟 5 中建立新的測試階段。

   

   1. 在 **​Build provider (建置提供者)** 中，選擇 **​Add Jenkins (新增 Jenkins)**。此建置選取為預留位置。不會使用。

   1. 在 **​Provider name (提供者名稱)** 中，輸入名稱。該名稱為預留位置。不會使用。

   1. 在 **​Server URL (伺服器 URL)** 中，輸入文字。該文字為預留位置。不會使用。

   1. 在 **​Project name (專案名稱)** 中，輸入名稱。該名稱為預留位置。不會使用。

   1. 選擇**下一步**。

   1. 在**步驟 5：新增測試階段**中，選擇**略過測試階段**，然後再次選擇**略過**以接受警告訊息。

      選擇**下一步**。

   1. 在**步驟 6：新增部署階段**頁面上，選擇**略過部署階段**，然後再次選擇**略過**以接受警告訊息。

   1. 在**步驟 7：檢閱**中，選擇**建立管道**。您應該會看到圖表，顯示該來源及建置階段。  
![\[\]](http://docs.aws.amazon.com/zh_tw/codepipeline/latest/userguide/images/codepipeline-view-pipeline-S3.png)

1. 將 Device Farm 測試動作新增至管道，如下所示：

   1. 在右上角，選擇 **Edit (編輯)**。

   1. 選擇 **Edit stage (編輯階段)**。選擇 **刪除**。這會刪除預留位置階段，因為針對建立管道，您已不再需要它。

   1. 在圖表的底部，選擇 **\$1 Add stage (\$1 新增階段)**。

   1. 在階段名稱中，輸入階段的名稱，例如測試，然後選擇 **Add stage (新增階段)**。

   1. 選擇 **\$1 Add action group (\$1 新增動作群組)**。

   1. 在 **Action name (動作名稱)** 中，輸入名稱，例如 DeviceFarmTest。

   1. 在**動作提供者**中，選擇 **AWS Device Farm**。允許 **Region (區域)** 預設為管道區域。

   1. 在 ​**Input artifacts (輸入成品)** 中，選擇與測試階段之前的階段輸出成品相符的輸入成品，例如 `SourceArtifact`。

      在 AWS CodePipeline 主控台中，將滑鼠暫留在管道圖表中的資訊圖示上，即可找到每個階段的輸出成品名稱。若您的管道是從 **​Source (來源)** 階段直接測試您的應用程式，請選擇 **​SourceArtifact**​。若管道包含 **​Build (建置)** 階段，請選擇 **​BuildArtifact**。

   1. 在 **ProjectId** 中，選擇您的 Device Farm 專案 ID。使用本教學課程開頭的步驟，擷取您的專案 ID。

   1. 在 **DevicePoolArn** 中，輸入裝置集區的 ARN。若要取得專案可用的裝置集區 ARNs，包括熱門裝置的 ARN，請使用 AWS CLI 輸入下列命令：

      ```
      aws devicefarm list-device-pools --arn arn:aws:devicefarm:us-west-2:account_ID:project:project_ID
      ```

   1. 在 **AppType** 中，輸入 **iOS**。

      以下是 **AppType** 的有效值清單：
      + **iOS**
      + **Android**
      + **Web**

   1. 在 **​App (應用程式)** 中，輸入已編譯的應用程式套件路徑。路徑為相對於測試階段輸入成品根的相對路徑。通常，此路徑與 `ios-test.ipa` 相似。

   1. 在 **TestType** 中，輸入您的測試類型，然後在 **Test** 中，輸入測試定義檔案的路徑。路徑為相對於您測試輸入成品根的相對路徑。

      如果您使用的是其中一個內建 Device Farm 測試，請輸入在 Device Farm 專案中設定的測試類型，例如 BUILTIN\$1FUZZ。在 **FuzzEventCount** 中，以毫秒為單位輸入時間，例如 6000。在 **FuzzEventThrottle** 中，以毫秒為單位輸入時間，例如 50。

      如果您未使用其中一個內建 Device Farm 測試，請輸入您的測試類型，然後在**測試**中輸入測試定義檔案的路徑。路徑為相對於您測試輸入成品根的相對路徑。

      以下是 **TestType** 的有效值清單：
      + **APPIUM\$1JAVA\$1JUNIT**
      + **APPIUM\$1JAVA\$1TESTNG**
      + **APPIUM\$1NODE**
      + **APPIUM\$1RUBY**
      + **APPIUM\$1PYTHON**
      + **APPIUM\$1WEB\$1JAVA\$1JUNIT**
      + **APPIUM\$1WEB\$1JAVA\$1TESTNG**
      + **APPIUM\$1WEB\$1NODE**
      + **APPIUM\$1WEB\$1RUBY**
      + **APPIUM\$1WEB\$1PYTHON**
      + **BUILTIN\$1FUZZ**
      + **INSTRUMENTATION**
      + **XCTEST**
      + **XCTEST\$1UI**
**注意**  
不支援自訂環境節點。

   1. 在剩餘欄位中，提供適用於您測試及應用程式類型的組態。

   1. (選擇性) 在 **Advanced (進階)** 中，提供您測試執行的組態資訊。

   1. 選擇**儲存**。

   1. 在您編輯的階段上，選擇 **Done (完成)**。在 AWS CodePipeline 窗格中，選擇 **Save (儲存)**，然後在警告訊息中選擇 **Save (儲存)**。

   1. 若要提交您的變更並啟動管道執行，請選擇 **​Release change (發行變更)**，然後選擇 **​Release (發行)**。