在 CodeBuild 中使用 AWS CLI 示例创建测试报告 - AWS CodeBuild
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

在 CodeBuild 中使用 AWS CLI 示例创建测试报告

您在 buildspec 文件中指定的测试将在构建期间运行。此示例演示如何在 CodeBuild 中使用 AWS CLI 将测试合并到构建中。您可以使用 JUnit 创建单元测试,也可以使用其他工具创建配置测试。然后,您可以评估测试结果以修复问题或优化您的应用程序。

您可以使用 CodeBuild API 或 AWS CodeBuild 控制台访问测试结果。此示例演示如何配置报告以便将其测试结果导出到 S3 存储桶。

Prerequisites

  • 创建您的测试用例。编写此示例时假设您有要包含在示例测试报告中的测试用例。您可以在 buildspec 文件中指定测试文件的位置。

    支持以下测试报告文件格式:

    • Cucumber JSON

    • JUnit XML

    • NUnit XML

    • NUnit3 XML

    • TestNG XML

    • Visual Studio TRX

    使用任何测试框架创建测试用例,这些测试框架可以采用以下格式之一创建报告文件(例如,Surefire JUnit 插件、TestNG 或 Cucumber)。

  • 创建 S3 存储桶并记下其名称。有关更多信息,请参阅 用户指南 中的如何创建 S3 存储桶?Amazon S3。

  • 创建一个 IAM 角色并记下其 ARN。创建构建项目时,您需要 ARN。

  • 如果您的角色没有以下权限,请添加它们。

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

    有关更多信息,请参阅测试报告操作的权限

创建报告组

  1. 创建一个名为的文件 CreateReportGroupInput.json

  2. 在 S3 存储桶中创建要将测试结果导出到的文件夹。

  3. 将以下内容复制到 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" } } }
  4. 在包含 CreateReportGroupInput.json 的目录中,运行以下命令:

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

    输出如下所示。记下 reportGroup 的 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 } }

使用报告组配置项目

要运行报告,您首先创建配置有报告组的 CodeBuild 构建项目。为报告组指定的测试用例将在您运行构建时运行。

  1. 创建一个名为 buildspec.yml 的 buildspec 文件。

  2. 使用以下 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。 有关更多信息,请参阅创建测试报告报告组命名

  3. 创建一个名为 project.json 的文件。 此文件包含 create-project 命令的输入。

  4. 将以下 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:4.0", "computeType": "small" }, "serviceRole": "arn:aws:iam:<your-aws-account-id>:role/service-role/<your-role-name>" }
  5. 在包含 project.json 的目录中运行以下命令。 这将创建一个名为 test-project 的项目。

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

运行和查看报告结果

在此部分中,您将运行之前创建的项目的构建。在构建过程中,CodeBuild 创建包含测试用例结果的报告。该报告包含在您指定的报告组中。

  1. 要启动构建,请运行以下命令。test-report-project 是上面创建的构建项目的名称。记下输出中显示的构建 ID。

    aws codebuild start-build --project-name test-report-project
  2. 运行以下命令以获取有关您的构建的信息,包括报告的 ARN。对于 <build-id>,请指定您的构建 ID。在输出的 reportArns 属性中记下报告 ARN。

    aws codebuild batch-get-builds --ids <build-id>
  3. 运行以下命令以获取有关报告的详细信息。对于 <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": "<your-S3-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": [] }
  4. 运行以下命令列出有关报告的测试用例的信息。对于 <report-arn>,请指定报告的 ARN。对于可选的 --filter 参数,您可以指定一个状态结果(SUCCEEDEDFAILEDSKIPPEDERRORUNKNOWN)。

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