

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

# 「使用 範例測試報告 AWS CLI」
<a name="sample-test-report-cli"></a>

在建置期間便會執行您在 buildspec 檔案中指定的測試。此範例說明如何使用 AWS CLI 將測試納入 CodeBuild 中的組建。您可以使用 JUnit 建立單位測試，或使用另一個工具建立組態測試。然後您可以評估測試結果，以修正問題或最佳化您的應用程式。

您可以使用 CodeBuild API 或 AWS CodeBuild 主控台來存取測試結果。此範例示範如何設定報告，以將其測試結果匯出至 S3 儲存貯體。

**Topics**
+ [執行測試報告範例](#sample-test-report-cli-run)

## 執行測試報告範例
<a name="sample-test-report-cli-run"></a>

使用下列步驟來執行 trest 報告範例。

**Topics**
+ [先決條件](#sample-test-report-cli-prerequisites)
+ [步驟 1：建立報告群組](#sample-test-report-cli-create-report)
+ [步驟 2：使用報告群組設定專案](#sample-test-report-cli-create-project-with-report)
+ [步驟 3：執行和檢視報告的結果](#sample-test-report-cli-run-and-view-report-results)

### 先決條件
<a name="sample-test-report-cli-prerequisites"></a>
+ 建立您的測試案例。此範例是假設您已將測試案例納入您的範例測試報告中所撰寫。您可以在 buildspec 檔案中指定測試檔案的位置。

  支援下列測試報告檔案格式：
  + 小黃瓜 JSON (.json)
  + JUnit XML (.xml)
  + NUnit XML (.xml)
  + NUnit3 XML (.xml)
  + TestNG XML (.xml)
  + Visual Studio TRX (.trx)
  + Visual Studio TRX XML (.xml)

  使用可以用其中一種格式 (例如，Surefire JUnit 外掛程式、TestNG 或 Cucumber) 建立報告檔案的任何測試框架，來建立您的測試案例。
+ 建立 S3 儲存貯體並記下其名稱。如需詳細資訊，請參閱《Amazon [ S3 使用者指南》中的如何建立 S3 儲存貯體？](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html)。 *Amazon S3 * 
+ 建立 IAM 角色並記下其 ARN。當您建立建置專案時，需要使用 ARN。
+ 如果您的角色沒有下列許可，請新增這些許可。

  ```
  {
      "Effect": "Allow",
      "Resource": [
          "*"
      ],
      "Action": [
          "codebuild:CreateReportGroup",
          "codebuild:CreateReport",
          "codebuild:UpdateReport",
          "codebuild:BatchPutTestCases"
      ]
  }
  ```

   如需詳細資訊，請參閱[測試報告操作的許可](test-permissions.md#test-permissions-related-to-reporting)。

### 步驟 1：建立報告群組
<a name="sample-test-report-cli-create-report"></a>

1. 建立名為 `CreateReportGroupInput.json` 的檔案。

1. 在 S3 儲存貯體中建立要匯出測試結果的資料夾。

1. 將以下內容複製到 `CreateReportGroupInput.json`。對於 `<bucket-name>`，請使用 S3 儲存貯體的名稱。對於 `<path-to-folder>`，請輸入在 S3 儲存貯體中資料夾的路徑。

   ```
   {
     "name": "<report-name>",
     "type": "TEST",
     "exportConfig": {
       "exportConfigType": "S3",
       "s3Destination": {
         "bucket": "<bucket-name>",
         "path": "<path-to-folder>",
         "packaging": "NONE"
       }
     }
   }
   ```

1. 在包含 `CreateReportGroupInput.json` 的目錄中執行下列命令：

   ```
   aws codebuild create-report-group --cli-input-json file://CreateReportGroupInput.json
   ```

   輸出看起來如下。記下 `reportGroup` 的 ARN。當您建立使用此報告群組的專案時，您會使用此 ARN。

   ```
   {
     "reportGroup": {
       "arn": "arn:aws:codebuild:us-west-2:123456789012:report-group/<report-name>",
       "name": "<report-name>",
       "type": "TEST",
       "exportConfig": {
         "exportConfigType": "S3",
         "s3Destination": {
           "bucket": "<s3-bucket-name>",
           "path": "<folder-path>",
           "packaging": "NONE",
           "encryptionKey": "arn:aws:kms:us-west-2:123456789012:alias/aws/s3"
         }
       },
       "created": 1570837165.885,
       "lastModified": 1570837165.885
     }
   }
   ```

### 步驟 2：使用報告群組設定專案
<a name="sample-test-report-cli-create-project-with-report"></a>

若要執行報告，請先建立使用報告群組設定的 CodeBuild 建置專案。當您執行建置時，便會執行您的報告群組指定的測試案例。

1. 建立名為 `buildspec.yml` 的 buildspec 檔案。

1. 使用下列 YAML 做為您 `buildspec.yml` 檔案的範本。請務必納入執行測試的命令。在 `reports` 區段中，指定包含測試案例結果的檔案。這些檔案會存放您可以使用 CodeBuild 存取的測試結果。它們會在建立的 30 天後過期。這些檔案不同於您匯出至 S3 儲存貯體的原始測試案例結果檔案。

   ```
   version: 0.2
       phases:
       install:
           runtime-versions:
               java: openjdk8
       build:
         commands:
           - echo Running tests 
           - <enter commands to run your tests>
           
       reports:
         <report-name-or-arn>: #test file information
         files:
           - '<test-result-files>'
         base-directory: '<optional-base-directory>'
         discard-paths: false #do not remove file paths from test result files
   ```
**注意**  
如果不要使用現有報告群組的 ARN，您也可以指定尚未建立之報告群組的名稱。如果您指定名稱而非 ARN，CodeBuild 會在執行組建時建立報告群組。其名稱包含專案名稱，以及您在 Buildspec 檔案中用此格式指定的名稱：`project-name-report-group-name`。如需詳細資訊，請參閱[建立測試報告](report-create.md)及[報告群組命名](test-report-group-naming.md)。

1. 建立名為 `project.json` 的檔案。此檔案包含 **create-project** 命令的輸入。

1. 將以下 JSON 複製到 `project.json`。對於 `source`，請輸入包含您的來源檔案之儲存庫的類型和位置。對於 `serviceRole`，指定您正使用之角色的 ARN。

   ```
   {
     "name": "test-report-project",
     "description": "sample-test-report-project",
     "source": {
       "type": "CODECOMMIT|CODEPIPELINE|GITHUB|S3|BITBUCKET|GITHUB_ENTERPRISE|NO_SOURCE",
       "location": "<your-source-url>"
     },
     "artifacts": {
       "type": "NO_ARTIFACTS"
     },
     "cache": {
       "type": "NO_CACHE"
     },
     "environment": {
       "type": "LINUX_CONTAINER",
       "image": "aws/codebuild/standard:5.0",
       "computeType": "small"
     },
     "serviceRole": "arn:aws:iam::<your-aws-account-id>:role/service-role/<your-role-name>"
   }
   ```

1. 在包含 `project.json` 的目錄中執行下列命令：這會建立名為 `test-project` 的專案。

   ```
   aws codebuild create-project --cli-input-json file://project.json
   ```

### 步驟 3：執行和檢視報告的結果
<a name="sample-test-report-cli-run-and-view-report-results"></a>

在本節中，您會執行先前建立專案的建置。在建置過程中，CodeBuild 會建立包含測試案例結果的報告。報告包含在您所指定的報告群組中。

1. 若要啟動組建，請執行下列命令。 `test-report-project`是上述建立的組建專案名稱。記下在輸出中出現的建置 ID。

   ```
   aws codebuild start-build --project-name test-report-project
   ```

1. 執行下列命令，以取得建置的相關資訊，包括您報告的 ARN。對於 `<build-id>`，請指定您的建置 ID。在輸出的 `reportArns` 屬性中記下報告 ARN。

   ```
   aws codebuild batch-get-builds --ids <build-id>
   ```

1. 執行下列命令以取得報告的詳細資訊。對於 `<report-arn>`，請指定您的報告 ARN。

   ```
   aws codebuild batch-get-reports --report-arns <report-arn>
   ```

   輸出看起來如下。此範例輸出指出有多少測試成功、失敗、略過、導致錯誤或傳回不明狀態。

   ```
   {
     "reports": [
       {
         "status": "FAILED",
         "reportGroupArn": "<report-group-arn>",
         "name": "<report-group-name>",
         "created": 1573324770.154,
         "exportConfig": {
           "exportConfigType": "S3",
           "s3Destination": {
             "bucket": "<amzn-s3-demo-bucket>",
             "path": "<path-to-your-report-results>",
             "packaging": "NONE",
             "encryptionKey": "<encryption-key>"
           }
         },
         "expired": 1575916770.0,
         "truncated": false,
         "executionId": "arn:aws:codebuild:us-west-2:123456789012:build/<name-of-build-project>:2c254862-ddf6-4831-a53f-6839a73829c1",
         "type": "TEST",
         "arn": "<report-arn>",
         "testSummary": {
           "durationInNanoSeconds": 6657770,
           "total": 11,
           "statusCounts": {
             "FAILED": 3,
             "SKIPPED": 7,
             "ERROR": 0,
             "SUCCEEDED": 1,
             "UNKNOWN": 0
           }
         }
       }
     ],
     "reportsNotFound": []
   }
   ```

1. 執行下列命令來列出與報告測試案例相關的資訊。對於 `<report-arn>`，指定您報告的 ARN。對於選用 `--filter` 參數，您可以指定一個狀態結果 (`SUCCEEDED`、`FAILED`、`SKIPPED`、`ERROR` 或 `UNKNOWN`)。

   ```
   aws codebuild describe-test-cases \
       --report-arn <report-arn> \
       --filter status=SUCCEEDED|FAILED|SKIPPED|ERROR|UNKNOWN
   ```

    輸出看起來如下。

   ```
   {
     "testCases": [
       {
         "status": "FAILED",
         "name": "Test case 1",
         "expired": 1575916770.0,
         "reportArn": "<report-arn>",
         "prefix": "Cucumber tests for agent",
         "message": "A test message",
         "durationInNanoSeconds": 1540540,
         "testRawDataPath": "<path-to-output-report-files>"
       },
       {
         "status": "SUCCEEDED",
         "name": "Test case 2",
         "expired": 1575916770.0,
         "reportArn": "<report-arn>",
         "prefix": "Cucumber tests for agent",
         "message": "A test message",
         "durationInNanoSeconds": 1540540,
         "testRawDataPath": "<path-to-output-report-files>"
       }
     ]
   }
   ```