在 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,请使用 S3 存储桶的名称。对于 path,请输入 S3 存储桶中文件夹的路径。

    { "name": "report-name", "type": "TEST", "exportConfig": { "exportConfigType": "S3", "s3Destination": { "bucket": "bucket-name", "path": "path-to-folder", "packaging": "NONE" } } }
  4. 在包含 CreateReportGroupInput.json 的目录中运行以下命令。 对于 region,请指定您的 AWS 区域(例如,us-east-2)。

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

    输出如下所示。记下 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": "your-repository-type", "location": "https://github.com/your-repository/your-folder" }, "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 \ --region your-region

运行和查看报告结果

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

  1. 要启动构建,请运行以下命令。记下输出中显示的构建 ID。其格式为 test-report>:build-id

    aws codebuild start-build --project-name "test-project" --region your-region
  2. 运行以下命令以获取有关您的构建的信息,包括报告的 ARN。对于 --ids,请指定您的构建 ID。记下输出中的报告 ARN。

    aws codebuild batch-get-builds \ --ids "build-id" \ --region your-region
  3. 运行以下命令以获取有关报告的详细信息。对于 --report-group-arn,请指定您的报告 ARN。

    aws codebuild batch-get-reports \ --report-arns report-group-arn \ --region your-region

    输出如下所示。此示例输出显示了成功、失败、跳过、导致错误或返回未知状态的测试数量。

    { "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 \ --region your-region

    输出如下所示。

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