'使用 AWS CLI'样本的测试报告 - AWS CodeBuild

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

'使用 AWS CLI'样本的测试报告

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

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

运行测试报告示例

使用以下步骤运行测试报告示例。

先决条件

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

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

    • 黄瓜 JSON (.json)

    • JUnitXML(.xml)

    • NUnitXML(.xml)

    • NUnit3XML(.xml)

    • testng XML (.xml)

    • Visual Studio TRX (.trx)

    • 视觉工作室 TRX XML (.xml)

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

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

  • 创建一个IAM角色并记下它ARN。在创建构建项目ARN时需要。

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

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

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

步骤 1:创建报告组

  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

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

步骤 2:使用报告组配置项目

要运行报告,您需要先创建一个使用您的报告组配置的 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

步骤 3:运行报告并查看其结果

在此部分中,您将运行之前创建的项目的构建。在生成过程中, 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": "<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": [] }
  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>" } ] }