

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# '使用 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>

按照以下步骤运行测试报告示例。

**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 文件中指定测试文件的位置。

  支持以下测试报告文件格式：
  + Cucumber 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) 
+ 创建一个 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>"
       }
     ]
   }
   ```