AWS CodeBuild 为更快的持续集成添加了并行测试执行功能

AWS 宣布在全托管的持续集成服务 AWS CodeBuild 中提供并行测试执行。此新功能可让测试套件在多个构建计算环境中并发运行,从而显著减少构建时间。随着项目变得越来越复杂,持续集成(CI)管道中冗长的测试执行时间带来的挑战日益增加,长周期会延迟功能交付、阻碍开发者生产力并增加成本。

Thomas Fernandez 在 Semaphore 的关于并行测试的博客文章中写道:并行测试让我们在等待更少的时间内做更多事情,是保持敏锐和准备就绪的重要工具,能始终建立快速反馈循环。

在 CodeBuild 中使用并行测试执行,开发者可配置构建过程,将测试套件拆分并在多个独立构建节点中并行运行。CodeBuild 提供环境变量来识别当前节点和节点总数,以实现智能测试分配。该功能支持分片方法,有两种主要策略:

  • 平等分配:按字母顺序对测试文件进行排序,并在并行环境中平均分配。
  • 稳定性:使用一致的哈希算法,即使在添加或删除测试文件时也能保持文件到分片的分配。

要启用并行测试,开发者在 buildspec.xml 文件的批处理分支部分进行配置,指定所需的并行级别。在构建步骤中使用预安装的codebuild-tests-run实用程序,根据所选策略管理测试执行和分片。以下是一个在 Linux 平台上使用 Cucumber 进行并行测试执行的 buildspec.yml 示例:

version: 0.2

batch:
  fast-fail: false
  build-fanout:
    parallelism: 5
    ignore-failure: false

phases:
  install:
    commands:
      - echo 'Installing Ruby dependencies'
      - gem install bundler
      - bundle install
  pre_build:
    commands:
      - echo 'prebuild'
  build:
    commands:
      - echo 'Running Cucumber Tests'
      - cucumber --init
      - |
        codebuild-tests-run \
         --test-command "cucumber" \
         --files-search "codebuild-glob-search '**/*.feature'"
  post_build:
    commands:
      - echo "Test execution completed"

CodeBuild 还会将并行执行的测试报告自动合并为一个综合测试摘要,通过CodeBuild 控制台AWS CLI或与其他报告工具集成,简化结果分析,提供汇总的通过/失败状态、测试持续时间和失败细节。

一个 AWS 的博客文章中展示的演示表明,对于一个有 1800 个测试的 Python 项目,在十个并行计算环境中运行时,总测试时间从 35 分钟减少到 6 分钟(包括环境供应)。AWS 的首席开发倡导者 Sébastien Stormacq写道:演示项目的 1800 个测试每个完成需 1 秒,顺序运行需 35 分钟,在十个计算环境中并行运行需 6 分钟,包括环境供应时间,并行运行时间是顺序运行时间的 17.9%。

此新功能与所有测试框架兼容,AWS 文档提供了流行语言和框架(如 Django、Elixir、Go、Java(Maven)、Javascript(Jest)、Kotlin、PHPUnit、Pytest、Ruby(Cucumber)和 Ruby(RSpec))的示例。对于有测试文件列表特定要求的框架,CodeBuild 提供 CODEBUILD_CURRENT_SHARD_FILES 环境变量,其中包含当前分片的换行分隔的测试文件列表。

并行测试执行在 AWS CodeBuild 中现已在提供 CodeBuild 的所有 AWS 区域可用,适用于所有三种计算模式:按需、预留容量和 AWS Lambda 计算,除使用的资源的标准 CodeBuild 定价外无额外成本。

阅读 10
0 条评论