CodeBuild 使用 Amazon CLI 样本创建测试报告 - Amazon CodeBuild
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

CodeBuild 使用 Amazon CLI 样本创建测试报告

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

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

先决条件

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

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

    • Cucumber JSON (.json)

    • JUnit XML (.xml)

    • NUnit XML (.xml)

    • NUnit3 XML (.xml)

    • TestNG XML (.xml)

    • Visual Studio TRX (.trx)

    • Visual Studio TRX XML (.xm

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

  • 创建 S3 存储桶并记下其名称。有关更多信息,请参阅《Amazon S3 用户指南》中的如何创建 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。您可以在创建使用此报告组的项目时使用该 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:5.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>" } ] }