

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

# 中的测试报告 AWS CodeBuild
<a name="test-reporting"></a>

您可以在中创建报告 CodeBuild ，其中包含有关生成期间运行的测试的详细信息。您可以创建诸如单元测试、配置测试和功能测试等测试。

支持以下测试报告文件格式：
+ Cucumber JSON (.json)
+ JUnit XML (.xml)
+ NUnit XML (.xml)
+ NUnit3 XML (.xml)
+ TestNG XML (.xml)
+ Visual Studio TRX (.trx)
+ Visual Studio TRX XML (.xml)

**注意**  
 支持的最新版本的 `cucumber-js` 是 7.3.2。

使用任何可以创建其中一种格式的报告文件的测试框架（例如 Surefire JUnit 插件、Testng 或 Cucumber）来创建您的测试用例。

要创建测试报告，请将报告组名称添加到构建项目的 buildspec 文件中，该文件包含有关测试用例的信息。运行构建项目时，系统将运行测试用例并创建测试报告。每次测试用例运行时，都会在报告组中创建一个新的测试报告。您不需要在运行测试之前创建报告组。如果您指定报告组名称，则会在您运行报告时为您 CodeBuild 创建一个报告组。如果要使用已存在的报告组，请在 buildspec 文件中指定其 ARN。

您可以使用测试报告帮助解决在构建运行期间发生的问题。如果您从构建项目的多个构建获得了许多测试报告，您可以使用测试报告查看趋势以及测试和失败率，以帮助您优化构建。

报告在创建后 30 天过期。您无法查看已过期的测试报告。如果您希望将测试报告保留 30 天以上，可以将测试结果的原始数据文件导出到 Amazon S3 存储桶。导出的测试文件不会过期。有关 S3 存储桶的信息在创建报告组时指定。

**注意**  
项目中指定的 CodeBuild 服务角色用于授予上传到 S3 存储桶的权限。

**Topics**
+ [创建测试报告](report-create.md)
+ [创建代码覆盖率报告](code-coverage-report.md)
+ [CodeBuild 中的自动发现报告](report-auto-discover.md)
+ [报告组](test-report-group.md)
+ [测试框架](test-framework-reporting.md)
+ [查看测试报告](test-view-reports.md)
+ [测试报告权限](test-permissions.md)
+ [测试报告状态](test-report.md)

# 创建测试报告
<a name="report-create"></a>

 要创建测试报告，您运行的构建项目应在 buildspec 文件中配置有一到五个报告组。测试报告在运行期间创建。它包含为报告组指定的测试用例的结果。对于使用相同构建规范文件的每个后续构建，系统将生成一个新的测试报告。

**创建测试报告**

1. 创建构建项目。有关信息，请参阅[在 中创建构建项目AWS CodeBuild](create-project.md)。

1. 使用测试报告信息配置项目的 buildspec 文件：

   1. 添加 `reports:` 部分并指定现有报告组的 ARN 或报告组的名称。

      如果您指定 ARN，则 CodeBuild 使用该报告组。

      如果您指定名称，则使用您的项目名称和您指定的名称（格式为 *<project-name>*-）为您 CodeBuild 创建一个报告组*<report-group-name>*。如果指定的报告组已经存在，则 CodeBuild 使用该报告组。

   1. 在报告组下，指定包含测试结果的文件的位置。如果您使用多个报告组，请为每个报告组指定测试结果文件位置。每次运行构建项目时都会创建一个新的测试报告。有关更多信息，请参阅 [指定测试文件](report-group-test-cases.md)。

   1. 在 `build` 或 `post_build` 序列的 `commands` 部分中，指定将运行您为报告组指定的测试用例的命令。有关更多信息，请参阅 [指定测试命令](report-group-test-case-commands.md)。

   下面是一个 buildspec `reports` 部分示例：

   ```
   reports:
     php-reports:
       files:
         - "reports/php/*.xml"
       file-format: "JUNITXML"
     nunit-reports:
       files:
         - "reports/nunit/*.xml"
       file-format: "NUNITXML"
   ```

1. 运行构建项目中的构建。有关更多信息，请参阅 [手动运行 AWS CodeBuild 构建](run-build.md)。

1. 构建完成后，从项目页面上的**构建历史记录**中选择新的构建运行。选择**报告**以查看测试报告。有关更多信息，请参阅 [查看构建的测试报告](test-view-project-reports.md)。

# 创建代码覆盖率报告
<a name="code-coverage-report"></a>

CodeBuild 允许您为测试生成代码覆盖率报告。提供以下代码覆盖率报告：

行覆盖率  
行覆盖率衡量您的测试涵盖了多少语句。语句是一条指令，不包括注释或条件。  
`line coverage = (total lines covered)/(total number of lines)`

分支覆盖率  
分支覆盖率衡量您的测试覆盖了控制结构（例如 `if` 或 `case` 语句）中所有可能的分支中的多少个分支。  
`branch coverage = (total branches covered)/(total number of branches)`

支持以下代码覆盖率报告文件格式：
+ JaCoCo XML
+ SimpleCov JSON¹
+ Clover XML
+ XML 覆盖范围
+ LCOV INFO

[¹ CodeBuild 接受 simplecov 生成的 JSON 代码覆盖率报告，而不是 s [implecov](https://github.com/simplecov-ruby/simplecov)-json。](https://github.com/vicentllongo/simplecov-json)

## 创建代码覆盖率报告
<a name="code-coverage-report-create"></a>

要创建代码覆盖率报告，您需要运行一个在其 buildspec 文件中配置了至少一个代码覆盖率报告组的生成项目。 CodeBuild 将解释代码覆盖率结果并为运行提供代码覆盖率报告。对于使用相同构建规范文件的每个后续构建，系统将生成一个新的测试报告。

**创建测试报告**

1. 创建构建项目。有关信息，请参阅[在 中创建构建项目AWS CodeBuild](create-project.md)。

1. 使用测试报告信息配置项目的构建规范文件：

   1. 添加一个`reports:`分区并指定报告组的名称。 CodeBuild 使用您的项目名称和以 `project-name`-格式指定的名称为您创建报告组`report-group-name-in-buildspec`。如果已存在要使用的报告组，请指定其 ARN。如果您使用名称而不是 ARN，则 CodeBuild 会创建一个新的报告组。有关更多信息，请参阅 [Reports syntax in the buildspec file](build-spec-ref.md#reports-buildspec-file)。

   1. 在报告组下，指定包含代码覆盖率结果的文件的位置。如果您使用多个报告组，请为每个报告组指定结果文件位置。每次运行构建项目时都会创建一个新的代码覆盖率报告。有关更多信息，请参阅 [指定测试文件](report-group-test-cases.md)。

      这是一个为位于 test- JaCoCo 中的 XML 结果文件生成代码覆盖率报告的示例`results/jacoco-coverage-report.xml`。

      ```
      reports:
        jacoco-report:
          files:
            - 'test-results/jacoco-coverage-report.xml'
          file-format: 'JACOCOXML'
      ```

   1. 在 `build` 或 `post_build` 序列的 `commands` 部分中，指定用来运行代码覆盖率分析的命令。有关更多信息，请参阅 [指定测试命令](report-group-test-case-commands.md)。

1. 运行构建项目中的构建。有关更多信息，请参阅 [手动运行 AWS CodeBuild 构建](run-build.md)。

1. 构建完成后，从项目页面上的**构建历史记录**中选择新的构建运行。选择**报告**来查看代码覆盖率报告。有关更多信息，请参阅 [查看构建的测试报告](test-view-project-reports.md)。

# CodeBuild 中的自动发现报告
<a name="report-auto-discover"></a>

借助自动发现功能，CodeBuild 可以在构建阶段完成后搜索所有构建文件、搜索任何支持的报告文件类型，以及自动创建新的测试和代码覆盖率报告组和报告。对于任何发现的报告类型，CodeBuild 都会使用以下模式创建新的报告组：

```
<project-name>-<report-file-format>-AutoDiscovered
```

**注意**  
如果发现的报告文件格式类型相同，则会将它们放入同一个报告组或报告中。

通过项目环境变量配置报告自动发现：

`CODEBUILD_CONFIG_AUTO_DISCOVER`  
此变量确定在构建期间是否禁用报告自动发现。默认情况下，所有构建均启用报告自动发现。要禁用此特征，请将 `CODEBUILD_CONFIG_AUTO_DISCOVER` 设置为 `false`。

`CODEBUILD_CONFIG_AUTO_DISCOVER_DIR`  
（可选）此变量确定 CodeBuild 在哪里搜索可能存在的报告文件。请注意，默认情况下，CodeBuild 会在 `**/*` 中搜索。

在构建阶段可以修改这些环境变量。例如，如果您只想为 `main` git 分支上的构建启用报告自动发现，则可以在构建过程中选中 git 分支，如果构建不在 `main` 分支上，则将 `CODEBUILD_CONFIG_AUTO_DISCOVER` 设置为 false。可以使用控制台或使用项目环境变量来禁用报告自动发现。

**Topics**
+ [使用控制台配置报告自动发现](#report-auto-discover-configure-console)
+ [使用项目环境变量配置报告自动发现](#report-auto-discover-configure-variable)

## 使用控制台配置报告自动发现
<a name="report-auto-discover-configure-console"></a>

按照以下过程使用控制台来配置报告自动发现。

**使用控制台配置报告自动发现**

1. 创建构建项目或选择要编辑的构建项目。有关更多信息，请参阅 [在 中创建构建项目AWS CodeBuild](create-project.md) 或 [在中更改构建项目设置 AWS CodeBuild](change-project.md)。

1. 在**环境**中，选择**其他配置**。

1. 要禁用报告自动发现，在**报告自动发现**中，选择**禁用报告自动发现**。

1. （可选）在**自动发现目录 - 可选**中，输入 CodeBuild 的目录模式来搜索支持的报表格式文件。请注意，默认情况下，CodeBuild 会在 `**/*` 中搜索。

## 使用项目环境变量配置报告自动发现
<a name="report-auto-discover-configure-variable"></a>

按照以下过程使用项目环境变量来配置报告自动发现。

**使用项目环境变量配置报告自动发现**

1. 创建构建项目或选择要编辑的构建项目。有关更多信息，请参阅 [在 中创建构建项目AWS CodeBuild](create-project.md) 或 [在中更改构建项目设置 AWS CodeBuild](change-project.md)。

1. 在**环境变量**中，执行以下操作：

   1. 要禁用报告自动发现，在**名称**中输入 **CODEBUILD\$1CONFIG\$1AUTO\$1DISCOVER**，在**值**中输入 **false**。这将禁用报告自动发现。

   1. （可选）在**名称**中输入 **CODEBUILD\$1CONFIG\$1AUTO\$1DISCOVER\$1DIR**，在**值**中输入 CodeBuild 应该搜索受支持报告格式文件的目录。例如，`output/*xml` 在 `output` 目录中搜索 `.xml` 文件

# 报告组
<a name="test-report-group"></a>

*报告组*包含测试报告并指定共享设置。您可以使用 buildspec 文件指定要在构建时运行的测试用例以及运行它们的命令。对于在构建项目中配置的每个报告组，每次运行构建项目都会创建一个测试报告。多次运行配置有一个报告组的构建项目会在该报告组中创建多个测试报告，每个报告都包含为该报告组指定的相同测试用例的结果。

 测试用例在构建项目的 buildspec 文件中针对报告组进行指定。您可以在一个构建项目中指定最多五个报告组。运行构建时，将运行所有测试用例。将创建一个新的测试报告，其中包含为报告组指定的每个测试用例的结果。每次运行新构建时，都会运行测试用例，并创建一个包含新测试结果的新测试报告。

 报告组可用于多个构建项目。使用一个报告组创建的所有测试报告共享相同配置，如导出选项和权限，即使使用不同构建项目创建测试报告也是如此。在多个构建项目中使用一个报告组创建的测试报告可以包含运行不同测试用例集的结果（每个构建项目对应一个测试用例组）。这是因为您可以在每个项目的 buildspec 文件中为报告组指定不同的测试用例文件。您还可以通过编辑构建项目的 buildspec 文件来更改构建项目中的报告组的测试用例文件。后续运行构建会创建新的测试报告，其中包含更新的 buildspec 中的测试用例文件的结果。

**Topics**
+ [创建报告组](report-group-create.md)
+ [报告组命名](test-report-group-naming.md)
+ [共享报告组](report-groups-sharing.md)
+ [指定测试文件](report-group-test-cases.md)
+ [指定测试命令](report-group-test-case-commands.md)
+ [在中标记报告组 AWS CodeBuild](how-to-tag-report-group.md)
+ [更新报告组](report-group-export-settings.md)

# 创建报告组
<a name="report-group-create"></a>

 您可以使用 CodeBuild 控制台 AWS CLI、或 buildspec 文件来创建报告组。您的 IAM 角色必须具有创建报告组所需的权限。有关更多信息，请参阅 [测试报告权限](test-permissions.md)。

**Topics**
+ [创建报告组（buildspec）](#test-report-group-create-buildspec)
+ [创建报告组（控制台）](#test-report-group-create-console)
+ [创建报告组（CLI）](#test-report-group-create-cli)
+ [创建报告组（CloudFormation）](#test-report-group-create-cfn)

## 创建报告组（buildspec）
<a name="test-report-group-create-buildspec"></a>

使用 buildspec 创建的报告组不会导出原始测试结果文件。您可以查看报告组并指定导出设置。有关更多信息，请参阅 [更新报告组](report-group-export-settings.md)。

**使用 buildspec 文件创建报告组**

1.  选择与您 AWS 账户中的报告组无关的报告组名称。

1.  使用此名称配置 buildspec 文件的 `reports` 部分。在此示例中，报告组名称为`new-report-group`，使用测试用例是使用 JUnit 框架创建的：

   ```
   reports:
    new-report-group: #surefire junit reports
      files:
        - '**/*'
      base-directory: 'surefire/target/surefire-reports'
   ```

   也可以使用 buildspec 中的环境变量来指定报告组名称：

   ```
   version: 0.2
   env:
     variables:
       REPORT_GROUP_NAME: "new-report-group"
   phases:
     build:
       commands:
         - ...
   ...
   reports:
    $REPORT_GROUP_NAME:
      files:
        - '**/*'
      base-directory: 'surefire/target/surefire-reports'
   ```

    有关更多信息，请参阅[指定测试文件](report-group-test-cases.md)和[Reports syntax in the buildspec file](build-spec-ref.md#reports-buildspec-file)。

1. 在 `commands` 部分中，指定运行测试的命令。有关更多信息，请参阅 [指定测试命令](report-group-test-case-commands.md)。

1.  运行构建。构建完成后，将使用 `project-name-report-group-name` 格式的名称创建一个新的报告组。有关更多信息，请参阅 [报告组命名](test-report-group-naming.md)。



## 创建报告组（控制台）
<a name="test-report-group-create-console"></a>

按照以下过程使用 AWS 管理控制台创建报告组。

**创建报告组**

1. 在 [https://console.aws.amazon.com/codesuite/codebuild](https://console.aws.amazon.com/codesuite/codebuild/home) /home 中打开 AWS CodeBuild 控制台。

1. 在导航窗格中，选择**报告组**。

1. 选择**创建报告组**。

1. 对于**报告组名称**，输入报告组的名称。

1. （可选）在**标签**中，输入您希望支持 AWS 服务使用的任何标签的名称和值。使用**添加行**添加标签。最多可以添加 50 个标签。

1. 如果您想将测试报告结果的原始数据上传到 Amazon S3 存储桶：

   1. 选择**导出到 Amazon S3**。

   1. 对于 **S3 存储桶名称**，请输入 S3 存储桶的名称。

   1. （可选）对于 **S3 存储桶拥有者**，请输入拥有 S3 存储桶的账户的 AWS 账户标识符。这允许将报告数据导出到 Amazon S3 桶，该存储桶由运行构建的账户以外的账户拥有。

   1. 对于**路径前缀**，请输入要上传测试结果的 S3 存储桶中的路径。

   1. 选择**将测试结果数据压缩为 zip 文件**以便压缩原始测试结果数据文件。

   1. 展开**其他配置**以显示加密选项。选择下列选项之一：
      + 用 AWS 托管式密钥 于 Amazon S3 的@@ **默认 AWS 托管密钥**。有关更多信息，请参阅《*AWS Key Management Service 用户指南*》 CMKs中的[客户管理](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。这是默认加密选项。
      + **选择自定义密钥**将使用您创建和配置的客户托管密钥。对于**AWS KMS 加密密钥**，请输入加密密钥的 ARN。其格式为 ` arn:aws:kms:<region-id>: <aws-account-id>:key/<key-id> `。有关更多信息，请参阅《AWS Key Management Service 用户指南》**中的[创建 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。
      + **禁用构件加密**将禁用加密。如果要共享测试结果或将其发布到静态网站，则可以选择此选项。（动态网站可以运行代码来解密测试结果。）

      有关静态数据加密的更多信息，请参阅[数据加密](security-encryption.md)。
**注意**  
项目中指定的 CodeBuild 服务角色用于授予上传到 S3 存储桶的权限。

1. 选择**创建报告组**。

## 创建报告组（CLI）
<a name="test-report-group-create-cli"></a>

按照以下过程使用 AWS CLI创建报告组。

**创建报告组**

1. 创建一个名为 `CreateReportGroup.json`的文件。

1. 根据您的要求，将以下 JSON 代码段之一复制到 `CreateReportGroup.json`：
   + 使用以下 JSON 指定测试报告组将原始测试结果文件导出到 Amazon S3 存储桶。

     ```
     {
       "name": "<report-name>",
       "type": "TEST",
       "exportConfig": {
         "exportConfigType": "S3",
         "s3Destination": {
           "bucket": "<bucket-name>",
           "bucketOwner": "<bucket-owner>",
           "path": "<path>",
           "packaging": "NONE | ZIP",
           "encryptionDisabled": "false",
           "encryptionKey": "<your-key>"
         },
         "tags": [
           {
             "key": "tag-key",
             "value": "tag-value"
           }
         ]
       }
     }
     ```
     + *<bucket-name>*替换为您的 Amazon S3 存储桶*<path>*名称和存储桶中要导出文件的路径。
     + 如果要压缩导出的文件，对于 `packaging`，请指定 `ZIP`。否则，请指定 `NONE`。
     + `bucketOwner` 是可选的，仅当 Amazon S3 存储桶由运行构建的账户以外的账户拥有时才是必需的。
     + 使用 `encryptionDisabled` 指定是否要加密导出的文件。如果要加密导出的文件，请输入客户托管密钥。有关更多信息，请参阅 [更新报告组](report-group-export-settings.md)。
   + 使用以下 JSON 指定测试报告不会导出原始测试文件：

     ```
     {
       "name": "<report-name>",
       "type": "TEST",
       "exportConfig": {
         "exportConfigType": "NO_EXPORT"
       }
     }
     ```
**注意**  
项目中指定的 CodeBuild 服务角色用于授予上传到 S3 存储桶的权限。

1. 运行如下命令：

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

## 创建报告组（CloudFormation）
<a name="test-report-group-create-cfn"></a>

按照以下说明，使用 CloudFormation 模板创建报告组

 **使用 CloudFormation 模板创建报告组** 

 您可以使用 CloudFormation 模板文件来创建和配置报告组。有关更多信息，请参阅 [CloudFormation 用户指南](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)。

 以下 CloudFormation YAML 模板创建了一个不导出原始测试结果文件的报告组。

```
Resources:
  CodeBuildReportGroup:
    Type: AWS::CodeBuild::ReportGroup
    Properties:
      Name: my-report-group-name
      Type: TEST
      ExportConfig:
        ExportConfigType: NO_EXPORT
```

 以下 CloudFormation YAML 模板创建了一个报告组，用于将原始测试结果文件导出到 Amazon S3 存储桶。

```
Resources:
  CodeBuildReportGroup:
    Type: AWS::CodeBuild::ReportGroup
    Properties:
      Name: my-report-group-name
      Type: TEST
      ExportConfig:
        ExportConfigType: S3
        S3Destination:
          Bucket: amzn-s3-demo-bucket
          Path: path-to-folder-for-exported-files
          Packaging: ZIP
          EncryptionKey: my-KMS-encryption-key
          EncryptionDisabled: false
```

**注意**  
项目中指定的 CodeBuild 服务角色用于授予上传到 S3 存储桶的权限。

# 报告组命名
<a name="test-report-group-naming"></a>

 使用 AWS CLI 或 AWS CodeBuild 控制台创建报告组时，需要为报告组指定名称。如果您使用构建规范创建新的报告组，则使用 `project-name-report-group-name-specified-in-buildspec` 格式对其进行命名。通过运行该构建项目的构建所创建的所有报告都隶属于具有新名称的新报告组。

 如果您不 CodeBuild 想创建新的报告组，请在构建项目的 buildspec 文件中指定该报告组的 ARN。您可以在多个构建项目中指定一个报告组的 ARN。运行每个构建项目后，报告组包含由每个构建项目创建的测试报告。

 例如，如果您创建一个名为 `my-report-group` 的报告组，然后在两个名为 `my-project-1` 和 `my-project-2` 的不同构建项目中使用该报告组名称，并创建两个项目的构建，则会创建两个新的报告组。结果将生成三个具有以下名称的报告组：
+  `my-report-group`：没有任何测试报告。
+  `my-project-1-my-report-group`：包含由名为 `my-project-1` 的构建项目所运行的测试的结果报告。
+  `my-project-2-my-report-group`：包含由名为 `my-project-2` 的构建项目所运行的测试的结果报告。

 如果您在两个项目中使用名为 `my-report-group` 的报告组的 ARN，然后运行每个项目的构建，则只会生成一个报告组（`my-report-group`）。该报告组所含的测试报告包含由两个构建项目运行的测试的结果。

 如果您选择的报告组名称不属于您的 AWS 账户中的报告组，然后在 buildspec 文件中将该名称用于报告组，并运行其构建项目的构建，则会创建一个新的报告组。新报告组的名称格式为 `project-name-new-group-name`。例如，如果您的 AWS 账户中没有使用该名称的报表组`new-report-group`，并且在名为的生成项目中指定该名称`test-project`，则生成运行将使用该名称创建一个新的报告组`test-project-new-report-group`。

# 共享报告组
<a name="report-groups-sharing"></a>

报告组共享允许多个 AWS 账户或用户查看一个报告组、其未过期的报告及其报告的测试结果。在此模型中，拥有报告组的账户（拥有者）将与其他账户（使用者）共享该报告组。使用者无法编辑报告组。报告在创建后 30 天过期。

**Topics**
+ [共享报告组](#report-groups-sharing-share)
+ [相关服务](#report-groups-sharing-related)
+ [访问与您共享的报告组](report-groups-sharing-access-prereqs.md)
+ [取消共享已共享的报告组](report-groups-sharing-unshare.md)
+ [标识已共享的报告组](report-groups-sharing-identify.md)
+ [共享报告组权限](report-groups-sharing-perms.md)

## 共享报告组
<a name="report-groups-sharing-share"></a>

 共享报告组时，将向使用者授予对报告组及其报告的只读访问权限。使用者可以使用 AWS CLI 来查看报告组、其报告以及每个报告的测试用例结果。使用者不能执行以下操作：
+  在 CodeBuild 控制台中查看共享报告组或其报告。
+  编辑共享报告组。
+  使用项目中的共享报告组的 ARN 运行报告。指定共享报告组的项目构建将失败。

您可以使用 CodeBuild 控制台向现有资源共享添加报告组。如果要将报告组添加到新的资源共享，则必须首先在 [AWS RAM 控制台](https://console.aws.amazon.com/ram)中创建资源共享。

要与组织单位或整个组织共享报告组，您必须启用与 AWS Organizations的共享。有关更多信息，请参阅《AWS RAM 用户指南》中的[允许与 AWS Organizations共享](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html)。

您可以使用 CodeBuild 控制台、 AWS RAM 控制台或 AWS CLI 共享您拥有的报告组。

**先决条件**  
要共享报告组，您的 AWS 账户必须拥有该报告组。无法共享已与您共享的报告组。

**共享您拥有的报告组（CodeBuild 控制台）**

1. 在 [https://console.aws.amazon.com/codesuite/codebuild](https://console.aws.amazon.com/codesuite/codebuild/home) /home 中打开 AWS CodeBuild 控制台。

1. 在导航窗格中，选择**报告组**。

1.  选择要共享的项目，然后选择**共享**。有关更多信息，请参阅《AWS RAM 用户指南》中的[创建资源共享](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-create)。

**共享您拥有的报告组（AWS RAM 控制台）**  
请参阅《AWS RAM 用户指南**》中的[创建资源共享](https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing.html#working-with-sharing-create)。

**共享您拥有的报告组（AWS RAM 命令）**  
使用 [create-resource-share](https://docs.aws.amazon.com/cli/latest/reference/ram/create-resource-share.html) 命令。

 **共享您拥有的报告组（CodeBuild 命令）** 

使用 [put-resource-policy](https://docs.aws.amazon.com/cli/latest/reference/codebuild/put-resource-policy.html) 命令：

1. 创建一个名为 `policy.json` 的文件，并将以下内容复制到该文件中。

------
#### [ JSON ]

****  

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement":[{
        "Effect":"Allow",
        "Principal":{
          "AWS":"111122223333"
        },
        "Action":[
          "codebuild:BatchGetReportGroups",
          "codebuild:BatchGetReports",
          "codebuild:ListReportsForReportGroup",
          "codebuild:DescribeTestCases"],
        "Resource":"arn:aws:iam::*:role/Service*"
      }]
    }
   ```

------

1. 使用报告组 ARN 和标识符更新 `policy.json`，以便共享该报告组。以下示例向 Alice 和 123456789012 所标识的 AWS 账户的根用户授予对带有 ARN `arn:aws:codebuild:us-west-2:123456789012:report-group/my-report-group` 的报告组的只读访问权限。

------
#### [ JSON ]

****  

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement":[{
        "Effect":"Allow",
        "Principal":{
          "AWS": [
             "arn:aws:iam::123456789012:user/Alice",
             "123456789012"
           ]
        },
        "Action":[
          "codebuild:BatchGetReportGroups",
          "codebuild:BatchGetReports",
          "codebuild:ListReportsForReportGroup",
          "codebuild:DescribeTestCases"],
        "Resource":"arn:aws:codebuild:us-west-2:123456789012:report-group/my-report-group"
      }]
    }
   ```

------

1. 运行如下命令。

   ```
   aws codebuild put-resource-policy --resource-arn report-group-arn --policy file://policy.json
   ```

## 相关服务
<a name="report-groups-sharing-related"></a>

报告群组共享与 AWS Resource Access Manager (AWS RAM) 集成，该服务使您可以与任何 AWS 账户或通过任何账户共享 AWS 资源 AWS Organizations。使用 AWS RAM，您可以通过创建资源共享来共享资源，指定要与之*共享的资源*和使用者，从而共享您拥有的资源。消费者可以是个人 AWS 帐户 AWS Organizations、中的组织单位或中的整个组织 AWS Organizations。

有关更多信息，请参阅 *[AWS RAM 《用户指南》](https://docs.aws.amazon.com/ram/latest/userguide/)*。

# 访问与您共享的报告组
<a name="report-groups-sharing-access-prereqs"></a>

要访问共享报告组，使用者的 IAM 角色需要 `BatchGetReportGroups` 权限。您可以将以下策略附加到其 IAM 角色：

```
{
    "Effect": "Allow",
    "Resource": [
        "*"
    ],
    "Action": [
        "codebuild:BatchGetReportGroups"
    ]
}
```

 有关更多信息，请参阅 [将基于身份的策略用于 AWS CodeBuild](auth-and-access-control-iam-identity-based-access-control.md)。

# 取消共享已共享的报告组
<a name="report-groups-sharing-unshare"></a>

取消共享的报告组（包括其报告及其测试用例结果）只能由其拥有者访问。如果您取消共享某个报告组，则您之前与之共享该报告组的任何 AWS 账户或用户都无法访问该报告组、其报告或报告中测试用例的结果。

要取消共享您拥有的已共享报告组，必须从资源共享中将其删除。您可以使用 AWS RAM 控制台或 AWS CLI 来执行此操作。

**取消共享您拥有的共享报告组（AWS RAM 控制台）**  
请参阅《AWS RAM 用户指南》中的[更新资源共享](https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing.html#working-with-sharing-update)。

**取消共享您拥有的共享报告组（AWS RAM 命令）**  
使用 [disassociate-resource-share](https://docs.aws.amazon.com/cli/latest/reference/ram/disassociate-resource-share.html) 命令。

 **取消共享您拥有的报表组（ CodeBuild 命令）** 

运行[delete-resource-policy](https://docs.aws.amazon.com/cli/latest/reference/codebuild/delete-resource-policy.html)命令并指定要取消共享的报告组的 ARN：

```
aws codebuild delete-resource-policy --resource-arn report-group-arn
```

# 标识已共享的报告组
<a name="report-groups-sharing-identify"></a>

所有者和消费者可以使用 AWS CLI 来识别共享报告组。

要标识和获取有关共享报告组及其报告的信息，请使用以下命令：
+  要查看与 ARNs 您共享的报告组，请运行`[list-shared-report-groups](https://docs.aws.amazon.com/cli/latest/reference/codebuild/list-shared-report-groups.html)`：

  ```
  aws codebuild list-shared-report-groups
  ```
+  要查看报告 ARNs 组中的报告，请`[list-reports-for-report-group](https://docs.aws.amazon.com/cli/latest/reference/codebuild/list-reports-for-report-group.html)`使用报告组 ARN 运行：

  ```
  aws codebuild list-reports-for-report-group --report-group-arn report-group-arn
  ```
+  要查看有关报告中的测试用例的信息，请使用报告 ARN 运行 `[describe-test-cases](https://docs.aws.amazon.com/cli/latest/reference/codebuild/describe-test-cases.html)`：

  ```
  aws codebuild describe-test-cases --report-arn report-arn
  ```

   输出内容如下所示：

  ```
  {
      "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"
          }
      ]
  }
  ```

# 共享报告组权限
<a name="report-groups-sharing-perms"></a>

## 拥有者的权限
<a name="report-groups-perms-owner"></a>

报告组拥有者可以编辑报告组，并在项目中指定该报告组以运行报告。

## 使用者的权限
<a name="report-groups-perms-consumer"></a>

报告组使用者可以查看报告组、报告以及报告的测试用例结果。使用者无法编辑报告组或其报告，也无法使用报告组创建报告。

# 指定测试文件
<a name="report-group-test-cases"></a>

 您可以在构建项目 buildspec 文件的 `reports` 部分中为每个报告组指定测试结果文件及其位置。有关更多信息，请参阅 [Reports syntax in the buildspec file](build-spec-ref.md#reports-buildspec-file)。

 以下是 `reports` 部分的示例，该示例为构建项目指定了两个报告组。其中一个使用 ARN 指定，另一个使用名称指定。`files` 部分指定包含测试用例结果的文件。可选的 `base-directory` 部分指定测试用例文件所在的目录。可选的 `discard-paths` 部分指定是否丢弃将测试结果文件上传到 Amazon S3 存储桶的路径。

```
reports:
  arn:aws:codebuild:your-region:your-aws-account-id:report-group/report-group-name-1: #surefire junit reports
    files:
      - '**/*'
    base-directory: 'surefire/target/surefire-reports'
    discard-paths: false
    
  sampleReportGroup: #Cucumber reports from json plugin
    files:
      - 'cucumber-json/target/cucumber-json-report.json'
    file-format: CUCUMBERJSON #Type of the report, defaults to JUNITXML
```

# 指定测试命令
<a name="report-group-test-case-commands"></a>

 您可以在 buildspec 文件的 `commands` 部分中指定运行测试用例的命令。这些命令运行您在 buildspec 文件的 `reports` 部分中为报告组指定的测试用例。以下是 `commands` 部分的示例，其中包含用于运行测试文件中的测试的命令：

```
commands:
    - echo Running tests for surefire junit
    - mvn test -f surefire/pom.xml -fn
    - echo
    - echo Running tests for cucumber with json plugin
    - mvn test -Dcucumber.options="--plugin json:target/cucumber-json-report.json" -f cucumber-json/pom.xml -fn
```

有关更多信息，请参阅 [buildspec 语法](build-spec-ref.md#build-spec-ref-syntax)。

# 在中标记报告组 AWS CodeBuild
<a name="how-to-tag-report-group"></a>

*标签*是您或 AWS 分配给 AWS 资源的自定义属性标签。每个 AWS 标签分为两部分：
+ *标签键* （例如，`CostCenter`、`Environment`、`Project` 或 `Secret`）。标签键区分大小写。
+ 一个称为*标签值*的可选字段（例如，`111122223333`、`Production` 或团队名称）。省略标签值与使用空字符串效果相同。与标签键一样，标签值区分大小写。

这些被统称为键-值对。有关报告组可拥有的标签数量限制以及标签键和值的限制，请参阅[Tags](limits.md#tag-limits)。

标签可帮助您识别和整理 AWS 资源。许多 AWS 服务都支持标记，因此您可以为来自不同服务的资源分配相同的标签，以表明这些资源是相关的。例如，您可以为 CodeBuild 报告组分配与分配给 Amazon S3 存储桶相同的标签。有关使用标签的更多信息，请参阅[标记最佳实践](https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf)白皮书。

在中 CodeBuild，主要资源是报告组和项目。您可以使用 CodeBuild 控制台、 AWS CLI CodeBuild APIs、或 AWS SDKs 为报告组添加、管理和移除标签。除了使用标签标识、组织和跟踪报告组以外，您还可以在 IAM 策略中使用标签以帮助控制哪些用户可以查看并与报告组交互。有关基于标签的访问策略示例，请参阅[使用标签控制对 AWS CodeBuild 资源的访问权限](auth-and-access-control-using-tags.md)。

**Topics**
+ [为报告组添加标签](how-to-tag-report-group-add.md)
+ [查看报告组的标签](how-to-tag-report-group-list.md)
+ [编辑报告组的标签](how-to-tag-report-group-update.md)
+ [从报告组中移除标签](how-to-tag-report-group-delete.md)

# 为报告组添加标签
<a name="how-to-tag-report-group-add"></a>

向报告组添加标签可以帮助您识别和整理 AWS 资源并管理对资源的访问权限。首先，为报告组添加一个或多个标签（键值对）。请记住，报告组可以拥有的标签数量有限制。键和值字段中可以使用的字符有限制。有关更多信息，请参阅 [Tags](limits.md#tag-limits)。有了标签后，您可以创建 IAM 策略以根据这些标签管理对报告组的访问。您可以使用 CodeBuild 控制台或 AWS CLI 向报告组添加标签。

**重要**  
为报告组添加标签会影响对该报告组的访问。为报告组添加标签之前，请务必查看是否存在任何 IAM 策略可能使用标签来控制对资源（如报告组）的访问。有关基于标签的访问策略示例，请参阅[使用标签控制对 AWS CodeBuild 资源的访问权限](auth-and-access-control-using-tags.md)。

有关在创建报告组时为其添加标签的更多信息，请参阅[创建报告组（控制台）](report-group-create.md#test-report-group-create-console)。

**Topics**
+ [为报告组添加标签（控制台）](#how-to-tag-report-group-add-console)
+ [为报告组添加标签（AWS CLI）](#how-to-tag-report-group-add-cli)

## 为报告组添加标签（控制台）
<a name="how-to-tag-report-group-add-console"></a>

您可以使用 CodeBuild 控制台向 CodeBuild 报告组添加一个或多个标签。

1. 打开 CodeBuild 控制台，网址为[https://console.aws.amazon.com/codebuild/](https://console.aws.amazon.com/codebuild/)。

1. 在**报告组**中，选择要在其中添加标签的报告组的名称。

1. 在导航窗格中，选择**设置**。

1. 如果此报告组中尚未添加标签，请选择**添加标签**。您也可以选择**编辑**，然后选择**添加标签**。

1. 在**键**中，输入标签的名称。您可以在**值**中添加可选的标签值。

1. （可选）要添加其他标签，请再次选择**添加标签**。

1. 添加完标签后，选择**提交**。

## 为报告组添加标签（AWS CLI）
<a name="how-to-tag-report-group-add-cli"></a>

要在创建报告组时为其添加标签，请参阅[创建报告组（CLI）](report-group-create.md#test-report-group-create-cli)。在 `CreateReportGroup.json` 中，添加您的标签。

 要向现有报告组添加标签，请参阅[更新报告组（CLI）](report-group-export-settings.md#update-report-group-cli)并在 `UpdateReportGroupInput.json` 中添加标签。

在这些步骤中，我们假设您已安装最新版本的 AWS CLI 或已更新到当前版本。有关更多信息，请参阅[安装 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)。

# 查看报告组的标签
<a name="how-to-tag-report-group-list"></a>

标签可以帮助您识别和整理 AWS 资源并管理对资源的访问权限。有关使用标签的更多信息，请参阅[标记最佳实践](https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf)白皮书。有关基于标签的访问策略示例，请参阅[Deny or allow actions on report groups based on resource tags](auth-and-access-control-using-tags.md#report-group-tag-policy-example)。

## 查看报告组的标签（控制台）
<a name="how-to-tag-report-group-list-console"></a>

您可以使用 CodeBuild 控制台查看与 CodeBuild 报告组关联的标签。

1. 打开 CodeBuild 控制台，网址为[https://console.aws.amazon.com/codebuild/](https://console.aws.amazon.com/codebuild/)。

1. 在**报告组**中，选择要在其中查看标签的报告组的名称。

1. 在导航窗格中，选择**设置**。

## 查看报告组的标签（AWS CLI）
<a name="how-to-tag-report-group-list-cli"></a>

按照以下步骤使用 AWS CLI 来查看报告组的 AWS 标签。如果尚未添加标签，则返回的标签列表为空。

1.  使用控制台或 AWS CLI 查找您的报告组的 ARN。记下它。

------
#### [ AWS CLI ]

    运行如下命令。

   ```
   aws list-report-groups
   ```

    此命令返回类似下面的 JSON 格式信息：

   ```
   {
       "reportGroups": [
           "arn:aws:codebuild:region:123456789012:report-group/report-group-1",
           "arn:aws:codebuild:region:123456789012:report-group/report-group-2",
           "arn:aws:codebuild:region:123456789012:report-group/report-group-3"
       ]
   }
   ```

   报告组 ARN 以其名称结尾，您可以使用该名称来识别您的报告组的 ARN。

------
#### [ Console ]

   1. 打开 CodeBuild 控制台，网址为[https://console.aws.amazon.com/codebuild/](https://console.aws.amazon.com/codebuild/)。

   1. 在**报告组**中，选择带有您要查看的标签的报告组的名称。

   1.  在**配置**中，找到您的报告组的 ARN。

------

1.  运行如下命令。为 `--report-group-arns` 参数使用您记下的 ARN。

   ```
   aws codebuild batch-get-report-groups --report-group-arns arn:aws:codebuild:region:123456789012:report-group/report-group-name
   ```

    如果成功，此命令会返回 JSON 格式的信息，其中包含类似于下面的 `tags` 部分：

   ```
   {
       ...                        
       "tags": {
           "Status": "Secret",
           "Project": "TestBuild"
       }
       ...
   }
   ```

# 编辑报告组的标签
<a name="how-to-tag-report-group-update"></a>

您可以更改与报告组关联的标签值。您也可以更改键的名称，这相当于移除当前的标签并使用新名称和与另一个键相同的值添加一个不同的标签。请记住，键和值字段中可以使用的字符有限制。有关更多信息，请参阅 [Tags](limits.md#tag-limits)。

**重要**  
编辑报告组的标签会影响对该报告组的访问。编辑报告组的标签名称（键）或值之前，请务必查看是否存在任何 IAM 策略可能使用标签的键或值来控制对资源（如报告组）的访问。有关基于标签的访问策略示例，请参阅[Deny or allow actions on report groups based on resource tags](auth-and-access-control-using-tags.md#report-group-tag-policy-example)。

## 编辑报告组的标签（控制台）
<a name="how-to-tag-report-group-update-console"></a>

您可以使用 CodeBuild 控制台编辑与 CodeBuild 报告组关联的标签。

1. 打开 CodeBuild 控制台，网址为[https://console.aws.amazon.com/codebuild/](https://console.aws.amazon.com/codebuild/)。

1. 在**报告组**中，选择要在其中编辑标签的报告组的名称。

1. 在导航窗格中，选择**设置**。

1. 选择**编辑**。

1. 请执行以下操作之一：
   + 要更改标签，则在**键**中输入新名称。更改标签的名称相当于删除标签并使用新的键名添加新标签。
   + 要更改标签的值，则输入新值。如果您想将标签值清空，请删除当前的值并将字段保留为空白。

1. 编辑完标签后，选择**提交**。

## 编辑报告组的标签（AWS CLI）
<a name="how-to-tag-report-group-update-cli"></a>

 要添加、更改或移除报告组中的标签，请参阅[更新报告组（CLI）](report-group-export-settings.md#update-report-group-cli)。更新 `UpdateReportGroupInput.json` 中的标签。

# 从报告组中移除标签
<a name="how-to-tag-report-group-delete"></a>

您可以移除与报告组关联的一个或多个标签。移除标签不会从与该标签关联的其他 AWS 资源中删除该标签。

**重要**  
删除报告组的标签会影响对该报告组的访问。从报告组中移除标签之前，请务必查看是否存在任何 IAM 策略可能使用标签的键或值来控制对资源（如报告组）的访问。有关基于标签的访问策略示例，请参阅[使用标签控制对 AWS CodeBuild 资源的访问权限](auth-and-access-control-using-tags.md)。

## 从报告组中删除标签（控制台）
<a name="how-to-tag-report-group-delete-console"></a>

您可以使用 CodeBuild 控制台删除标签和 CodeBuild报告组之间的关联。

1. 打开 CodeBuild 控制台，网址为[https://console.aws.amazon.com/codebuild/](https://console.aws.amazon.com/codebuild/)。

1. 在**报告组**中，选择要从其中移除标签的报告组的名称。

1. 在导航窗格中，选择**设置**。

1. 选择**编辑**。

1. 找到要移除的标签，然后选择**移除标签**。

1. 移除标签之后，选择**提交**。

## 从报告组中移除标签（AWS CLI）
<a name="how-to-tag-report-group-delete-cli"></a>

按照以下步骤使用 AWS CLI 从 CodeBuild 报告组中移除标签。移除标签并不会删除标签，而只是删除它和报告组之间的关联。

**注意**  
如果删除 CodeBuild 报告组，则会从已删除的报告组中移除所有标签关联。您无需在删除报告组之前移除标签。

 要从报告组中删除一个或多个标签，请参阅[编辑报告组的标签（AWS CLI）](how-to-tag-report-group-update.md#how-to-tag-report-group-update-cli)。使用不包含待删除标签的更新标签列表来更新采用 JSON 格式数据的 `tags` 部分。如果要删除所有标签，请将 `tags` 部分更新为：

```
"tags: []"
```

# 更新报告组
<a name="report-group-export-settings"></a>

 当您更新报告组时，您可以指定是否将原始测试结果数据导出到 Amazon S3 存储桶中的文件的相关信息。如果您选择导出到 S3 存储桶，可以为报告组指定以下内容：
+ 是否将原始测试结果文件压缩为 ZIP 文件。
+ 是否对原始测试结果文件进行加密。您可以使用以下选项之一指定加密：
  +  AWS 托管式密钥 适用于亚马逊 S3。
  + 您创建和配置的客户托管密钥。

有关更多信息，请参阅 [数据加密](security-encryption.md)。

如果您使用更新报告组，则还可以更新或添加标签。 AWS CLI 有关更多信息，请参阅 [在中标记报告组 AWS CodeBuild标记报告组](how-to-tag-report-group.md)。

**注意**  
项目中指定的 CodeBuild 服务角色用于授予上传到 S3 存储桶的权限。

**Topics**
+ [更新报告组（控制台）](#update-report-group-console)
+ [更新报告组（CLI）](#update-report-group-cli)

## 更新报告组（控制台）
<a name="update-report-group-console"></a>

按照以下过程使用 AWS 管理控制台更新报告组。

**更新报告组的步骤**

1. 在 [https://console.aws.amazon.com/codesuite/codebuild](https://console.aws.amazon.com/codesuite/codebuild/home) /home 中打开 AWS CodeBuild 控制台。

1.  在导航窗格中，选择**报告组**。

1. 选择要更新的报告组。

1. 选择**编辑**。

1. 选择或清除**备份到 Amazon S3**。如果选择此选项，请指定您的导出设置：

   1. 对于 **S3 存储桶名称**，请输入 S3 存储桶的名称。

   1. 对于**路径前缀**，请输入要上传测试结果的 S3 存储桶中的路径。

   1. 选择**将测试结果数据压缩为 zip 文件**以便压缩原始测试结果数据文件。

   1. 展开**其他配置**以显示加密选项。选择下列选项之一：
      + 用 AWS 托管式密钥 于 Amazon S3 的@@ **默认 AWS 托管密钥**。有关更多信息，请参阅《*AWS Key Management Service 用户指南*》 CMKs中的[客户管理](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。这是默认加密选项。
      + **选择自定义密钥**将使用您创建和配置的客户托管密钥。对于**AWS KMS 加密密钥**，请输入加密密钥的 ARN。其格式为 ` arn:aws:kms:<region-id>: <aws-account-id>:key/<key-id> `。有关更多信息，请参阅《AWS Key Management Service 用户指南》**中的[创建 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。
      + **禁用构件加密**将禁用加密。如果要共享测试结果或将其发布到静态网站，则可以选择此选项。（动态网站可以运行代码来解密测试结果。）

## 更新报告组（CLI）
<a name="update-report-group-cli"></a>

按照以下过程使用 AWS CLI更新报告组。

**更新报告组的步骤**

1. 创建一个名为 `UpdateReportGroupInput.json`的文件。

1. 将以下内容复制到 `UpdateReportGroupInput.json`。

   ```
   {
       "arn": "",
       "exportConfig": {
           "exportConfigType": "S3",
           "s3Destination": {
               "bucket": "bucket-name", 
               "path": "path", 
               "packaging": "NONE | ZIP",
               "encryptionDisabled": "false",
               "encryptionKey": "your-key"
            }
        },
        "tags": [
           {
               "key": "tag-key",
               "value": "tag-value"
           }
        ]
   }
   ```

1. 在 `arn` 行中输入报告组的 ARN，例如 `"arn":"arn:aws:codebuild:region:123456789012:report-group/report-group-1")`。

1. 使用要应用到报告组的更新来更新 `UpdateReportGroupInput.json`。
   + 如果要更新报告组以将原始测试结果文件导出到 S3 存储桶，请更新 `exportConfig` 部分。将 `bucket-name` 替换为 S3 存储桶名称，并将 `path` 替换为 S3 存储桶中您要将文件导出到的路径。如果要压缩导出的文件，对于 `packaging`，请指定 `ZIP`。否则，请指定 `NONE`。使用 `encryptionDisabled` 指定是否要加密导出的文件。如果要加密导出的文件，请输入客户托管密钥。
   + 如果要更新报告组，以使其不会将原始测试结果文件导出到 S3 存储桶，请使用以下 JSON 更新 `exportConfig` 部分：

     ```
     { 
       "exportConfig": {
           "exportConfigType": "NO_EXPORT"
       }
     }
     ```
   + 如果要更新报告组的标签，请更新 `tags` 部分。您可以更改、添加或删除标签。如果要删除所有标签，请使用以下 JSON 来更新：

     ```
     "tags": []
     ```

1.  运行如下命令：

   ```
   aws codebuild update-report-group \
   --cli-input-json file://UpdateReportGroupInput.json
   ```

# 测试框架
<a name="test-framework-reporting"></a>

本节中的主题演示如何 AWS CodeBuild 为各种测试框架设置测试报告。

**Topics**
+ [使用 Jasmine 设置测试报告](test-report-jasmine.md)
+ [使用 Jest 设置测试报告](test-report-jest.md)
+ [使用 pytest 设置测试报告](test-report-pytest.md)
+ [使用 RSpec 设置测试报告](test-report-rspec.md)

# 使用 Jasmine 设置测试报告
<a name="test-report-jasmine"></a>

以下过程演示如何在 AWS CodeBuild 中使用 [JasmineBDD 测试框架](http://jasmine.github.io/)来设置测试报告。

该过程需要以下先决条件：
+ 您有一个现有的 CodeBuild 项目。
+ 您的项目是一个 Node.js 项目，此项目设置为使用 Jasmine 测试框架。

将 [https://www.npmjs.com/package/jasmine-reporters](https://www.npmjs.com/package/jasmine-reporters) 程序包添加到项目 `package.json` 文件的 `devDependencies` 部分。此程序包具有一系列可以与 Jasmine 一起使用 JavaScript 报告程序类。

```
npm install --save-dev jasmine-reporters
```

如果它尚未存在，请将 `test` 脚本添加到项目的 `package.json` 文件中。`test` 脚本确保在运行 **npm test** 时调用 Jasmine。

```
{
  "scripts": {
    "test": "npx jasmine"
  }
}
```

CodeBuild 支持以下 Jasmine 测试报告程序：

**JUnitXmlReporter**  
用于以 `JunitXml` 格式生成报告。

**NUnitXmlReporter**  
用于以 `NunitXml` 格式生成报告。

默认情况下，具有 Jasmine 的 Node.js 项目将有一个 `spec` 子目录，其中包含 Jasmine 配置和测试脚本。

要将 Jasmine 配置为以 `JunitXML` 格式生成报告，请通过将以下代码添加到测试中来实例化 `JUnitXmlReporter` 报告程序。

```
var reporters = require('jasmine-reporters');

var junitReporter = new reporters.JUnitXmlReporter({
  savePath: <test report directory>,
  filePrefix: <report filename>,
  consolidateAll: true
});

jasmine.getEnv().addReporter(junitReporter);
```

要将 Jasmine 配置为以 `NunitXML` 格式生成报告，请通过将以下代码添加到测试中来实例化 `NUnitXmlReporter` 报告程序。

```
var reporters = require('jasmine-reporters');

var nunitReporter = new reporters.NUnitXmlReporter({
  savePath: <test report directory>,
  filePrefix: <report filename>,
  consolidateAll: true
});

jasmine.getEnv().addReporter(nunitReporter)
```

测试报告将导出到由 *<测试报告目录>*/*<报告文件名>* 指定的文件中。

在您的 `buildspec.yml` 文件中，添加/更新以下部分。

```
version: 0.2

phases:
  pre_build:
    commands:
      - npm install
  build:
    commands:
      - npm build
      - npm test

reports:
  jasmine_reports:
    files:
      - <report filename>
    file-format: JUNITXML
    base-directory: <test report directory>
```

如果您使用的是 `NunitXml` 报告格式，请将 `file-format` 值更改为以下值。

```
    file-format: NUNITXML
```

# 使用 Jest 设置测试报告
<a name="test-report-jest"></a>

以下过程演示如何在 AWS CodeBuild 中使用 [Jest 测试框架](https://jestjs.io/)来设置测试报告。

该过程需要以下先决条件：
+ 您有一个现有的 CodeBuild 项目。
+ 您的项目是一个 Node.js 项目，此项目设置为使用 Jest 测试框架。

将 [https://www.npmjs.com/package/jest-junit](https://www.npmjs.com/package/jest-junit) 程序包添加到项目 `package.json` 文件的 `devDependencies` 部分。CodeBuild 使用此包生成格式为 `JunitXml` 的报告。

```
npm install --save-dev jest-junit
```

如果它尚未存在，请将 `test` 脚本添加到项目的 `package.json` 文件中。`test` 脚本确保在运行 **npm test** 时调用 Jest。

```
{
  "scripts": {
    "test": "jest"
  }
}
```

通过将以下内容添加到 Jest 配置文件中，将 Jest 配置为使用 `JunitXml` 报告程序。如果您的项目没有 Jest 配置文件，请在项目的根目录中创建一个名为 `jest.config.js` 的文件，然后添加以下内容。测试报告将导出到由 *<测试报告目录>*/*<报告文件名>* 指定的文件中。

```
module.exports = {
  reporters: [
    'default',
    [ 'jest-junit', {
      outputDirectory: <test report directory>,
      outputName: <report filename>,
    } ]
  ]
};
```

在您的 `buildspec.yml` 文件中，添加/更新以下部分。

```
version: 0.2

phases:
  pre_build:
    commands:
      - npm install
  build:
    commands:
      - npm build
      - npm test

reports:
  jest_reports:
    files:
      - <report filename>
    file-format: JUNITXML
    base-directory: <test report directory>
```

# 使用 pytest 设置测试报告
<a name="test-report-pytest"></a>

以下过程演示如何在 AWS CodeBuild 中使用 [pytest 测试框架](https://docs.pytest.org/)来设置测试报告。

该过程需要以下先决条件：
+ 您有一个现有的 CodeBuild 项目。
+ 您的项目是一个 Python 项目，此项目设置为使用 pytest 测试框架。

将以下条目添加到 `build` 文件的 `post_build` 或 `buildspec.yml` 阶段。此代码会自动发现当前目录中的测试，并将测试报告导出到由 *<测试报告目录>*/*<报告文件名>* 指定的文件中。报告使用 `JunitXml` 格式。

```
      - python -m pytest --junitxml=<test report directory>/<report filename>
```

在您的 `buildspec.yml` 文件中，添加/更新以下部分。

```
version: 0.2

phases:
  install:
    runtime-versions:
      python: 3.7
    commands:
      - pip3 install pytest
  build:
    commands:
      - python -m pytest --junitxml=<test report directory>/<report filename>

reports:
  pytest_reports:
    files:
      - <report filename>
    base-directory: <test report directory>
    file-format: JUNITXML
```

# 使用 RSpec 设置测试报告
<a name="test-report-rspec"></a>

以下过程演示如何在 AWS CodeBuild 中使用 [RSpec 测试框架](https://rspec.info/)来设置测试报告。

该过程需要以下先决条件：
+ 您有一个现有的 CodeBuild 项目。
+ 您的项目是一个 Ruby 项目，此项目设置为使用 RSpec 测试框架。

在 `buildspec.yml` 文件中添加/更新以下内容。此代码在 *<测试源代码目录>* 目录中运行测试，并将测试报告导出到由 *<测试报告目录>*/*<报告文件名>* 指定的文件中。报告使用 `JunitXml` 格式。

```
version: 0.2

phases:
  install:
    runtime-versions:
      ruby: 2.6
  pre_build:
    commands:
      - gem install rspec
      - gem install rspec_junit_formatter
  build:
    commands:
      - rspec <test source directory>/* --format RspecJunitFormatter --out <test report directory>/<report filename>
reports:
    rspec_reports:
        files:
            - <report filename>
        base-directory: <test report directory>
        file-format: JUNITXML
```

# 查看测试报告
<a name="test-view-reports"></a>

 您可以查看有关测试报告的详细信息，例如，有关其测试用例、通过和失败次数及其运行时间的信息。您可以查看按生成运行、报告组或您的 AWS 账户分组的测试报告。在控制台中选择测试报告以查看其详细信息和测试用例的结果。

 您可以查看未过期的测试报告。测试报告在创建后 30 天过期。您无法在 CodeBuild 中查看过期报告。

**Topics**
+ [查看构建的测试报告](test-view-project-reports.md)
+ [查看报告组的测试报告](test-view-report-group-reports.md)
+ [在您的 AWS 账户中查看测试报告](test-view-account-reports.md)

# 查看构建的测试报告
<a name="test-view-project-reports"></a>

**查看构建的测试报告**

1. 在 [https://console.aws.amazon.com/codesuite/codebuild](https://console.aws.amazon.com/codesuite/codebuild/home) /home 中打开 AWS CodeBuild 控制台。

1.  找到要查看的构建。如果您知道运行构建（创建测试报告）的项目，请执行以下操作：

   1.  在导航窗格中，选择**构建项目**，然后选择项目，该项目具有运行要查看的测试报告的构建。

   1.  选择**构建历史记录**，然后选择构建，该构建运行创建的要查看的报告。

    您还可以在您的 AWS 账户的构建历史记录中查找构建：

   1.  在导航窗格中，选择**构建历史记录**，然后选择构建，该构建已创建要查看的报告。

1. 在构建页面中，选择**报告**，然后选择测试报告以查看其详细信息。

# 查看报告组的测试报告
<a name="test-view-report-group-reports"></a>

**查看报告组中的测试报告**

1. 在 [https://console.aws.amazon.com/codesuite/codebuild](https://console.aws.amazon.com/codesuite/codebuild/home) /home 中打开 AWS CodeBuild 控制台。

1.  在导航窗格中，选择**报告组**。

1. 选择包含要查看的测试报告的报告组。

1.  选择测试报告以查看其详细信息。

# 在您的 AWS 账户中查看测试报告
<a name="test-view-account-reports"></a>



**在您的 AWS 账户中查看测试报告**

1. 在 [https://console.aws.amazon.com/codesuite/codebuild](https://console.aws.amazon.com/codesuite/codebuild/home) /home 中打开 AWS CodeBuild 控制台。

1.  在导航窗格中，选择**报告历史记录**。

1.  选择测试报告以查看其详细信息。

# 测试报告权限
<a name="test-permissions"></a>

 本主题介绍与测试报告相关权限有关的重要信息。

**Topics**
+ [测试报告的 IAM 角色](#test-permissions-required)
+ [测试报告操作的权限](#test-permissions-related-to-reporting)
+ [测试报告权限示例](#test-permissions-examples)

## 测试报告的 IAM 角色
<a name="test-permissions-required"></a>

要运行测试报告，并更新项目以包含测试报告，您的 IAM 角色需要以下权限。这些权限包含在预定义的 AWS 托管策略中。如果要将测试报告添加到现有构建项目，则必须自行添加这些权限。
+ `CreateReportGroup` 
+ `CreateReport` 
+ `UpdateReport` 
+ `BatchPutTestCases` 

要运行代码覆盖率报告，您的 IAM 角色还必须包含 `BatchPutCodeCoverages` 权限。

**注意**  
`BatchPutTestCases`、`CreateReport`、`UpdateReport` 和 `BatchPutCodeCoverages` 不是公共权限。您不能为这些权限调用相应的 AWS CLI 命令或 SDK 方法。

要确保您拥有这些权限，您可以将以下策略附加到您的 IAM 角色：

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

我们建议您将此策略仅限定用于您必须使用的报告组。以下内容将权限限制为仅包含两个 ARNs策略的报告组：

```
{
    "Effect": "Allow",
    "Resource": [
        "arn:aws:codebuild:your-region:your-aws-account-id:report-group/report-group-name-1",
        "arn:aws:codebuild:your-region:your-aws-account-id:report-group/report-group-name-2"
    ],
    "Action": [
        "codebuild:CreateReportGroup",
        "codebuild:CreateReport",
        "codebuild:UpdateReport",
        "codebuild:BatchPutTestCases",
        "codebuild:BatchPutCodeCoverages"
    ]
}
```

以下内容将权限仅限定用于通过运行名为 `my-project` 的项目构建而创建的报告组：

```
{
    "Effect": "Allow",
    "Resource": [
        "arn:aws:codebuild:your-region:your-aws-account-id:report-group/my-project-*"
    ],
    "Action": [
        "codebuild:CreateReportGroup",
        "codebuild:CreateReport",
        "codebuild:UpdateReport",
        "codebuild:BatchPutTestCases",
        "codebuild:BatchPutCodeCoverages"
    ]
}
```

**注意**  
项目中指定的 CodeBuild 服务角色用于授予上传到 S3 存储桶的权限。

## 测试报告操作的权限
<a name="test-permissions-related-to-reporting"></a>

 您可以为以下测试报告 CodeBuild API 操作指定权限：
+  `BatchGetReportGroups` 
+  `BatchGetReports` 
+  `CreateReportGroup` 
+  `DeleteReportGroup` 
+  `DeleteReport` 
+  `DescribeTestCases` 
+  `ListReportGroups` 
+  `ListReports` 
+  `ListReportsForReportGroup` 
+  `UpdateReportGroup` 

有关更多信息，请参阅 [AWS CodeBuild 权限参考](auth-and-access-control-permissions-reference.md)。

## 测试报告权限示例
<a name="test-permissions-examples"></a>

 有关测试报告相关示例策略的信息，请参阅以下内容：
+  [允许用户更改报告组](auth-and-access-control-iam-identity-based-access-control.md#customer-managed-policies-example-change-report-group) 
+  [允许用户创建报告组](auth-and-access-control-iam-identity-based-access-control.md#customer-managed-policies-example-create-report-group) 
+  [允许用户删除报告](auth-and-access-control-iam-identity-based-access-control.md#customer-managed-policies-example-delete-report) 
+  [允许用户删除报告组](auth-and-access-control-iam-identity-based-access-control.md#customer-managed-policies-example-delete-report-group) 
+  [允许用户获取有关报告组的信息](auth-and-access-control-iam-identity-based-access-control.md#customer-managed-policies-get-information-about-report-group) 
+  [允许用户获取有关报告的信息](auth-and-access-control-iam-identity-based-access-control.md#customer-managed-policies-get-information-about-reports) 
+  [允许用户获取报告组列表](auth-and-access-control-iam-identity-based-access-control.md#customer-managed-policies-example-get-list-of-report-groups) 
+  [允许用户获取报告列表](auth-and-access-control-iam-identity-based-access-control.md#customer-managed-policies-example-get-list-of-reports) 
+  [允许用户获取报告组的报告列表](auth-and-access-control-iam-identity-based-access-control.md#customer-managed-policies-example-get-list-of-reports-for-report-group) 
+  [允许用户获取报告的测试用例的列表](auth-and-access-control-iam-identity-based-access-control.md#customer-managed-policies-example-get-list-of-test-cases-for-report) 

# 测试报告状态
<a name="test-report"></a>

测试报告可能处于以下状态之一：
+ `GENERATING`：测试用例仍在运行中。
+ `DELETING`：正在删除测试报告。删除测试报告时，还将删除其测试用例。不会删除导出到 S3 存储桶的原始测试结果数据文件。
+ `INCOMPLETE`：测试报告未完成。由于以下原因之一，可能会返回此状态：
  + 指定此报告的测试用例的报告组配置有问题。例如，buildspec 文件中报告组下的测试用例路径可能不正确。
  + 运行构建的 IAM 用户没有运行测试的权限。有关更多信息，请参阅 [测试报告权限](test-permissions.md)。
  + 由于发生与测试无关的错误，构建未完成。
+ `SUCCEEDED`：所有测试用例都成功。
+ `FAILED`：部分测试用例未成功。

每个测试用例都会返回一个状态。测试用例可能处于以下状态之一：
+ `SUCCEEDED`：测试用例通过。
+ `FAILED`：测试用例失败。
+ `ERROR`：测试用例导致意外错误。
+ `SKIPPED`：测试用例未运行。
+ `UNKNOWN`：测试用例返回 `SUCCEEDED`、`FAILED`、`ERROR` 或 `SKIPPED` 以外的状态。

测试报告最多可包含 500 个测试用例结果。如果运行的测试用例超过 500 个，则按状态对测试进行 CodeBuild 优先排序，`FAILED`并截断测试用例结果。