持续集成和持续交付的测试阶段 - 在 AWS 上练习持续集成和持续交付

持续集成和持续交付的测试阶段

这三个 CI/CD 团队应在 CI/CD 管道的不同阶段将测试纳入软件开发生命周期。总体而言,应尽早开始测试。以下测试金字塔是迈克·科恩 (Mike Cohn) 在《成功与敏捷》 中提供的概念。它显示了各种软件测试以及相关的成本和运行速度。

CI/CD 测试金字塔

单元测试位于金字塔的底部。它们既是运行速度最快的,也是成本最低的。因此,单元测试应构成测试策略的重要部分。一个好的经验法则是大约 70%。单元测试应该具有近乎完整的代码覆盖率,因为在此阶段中找到的错误可以快速、低成本修复。

服务、组件和集成测试位于金字塔上单元测试的上方。这些测试需要详细的环境,因此满足基础设施要求的成本更高,运行速度更慢。性能和合规性测试是下一个级别。它们需要生产质量的环境,而且成本更高。用户界面和用户验收测试处于金字塔的顶端,也需要生产质量的环境。

所有这些测试都是确保高质量软件的完整策略的一部分。但是,为了加快开发速度,重点是金字塔下半部分的测试数量和覆盖范围。

以下各节将讨论 CI/CD 阶段。

设置源代码

在项目开始时,务必设置可以存储原始代码以及配置和架构更改的源代码。在源代码阶段,选择源代码存储库,例如托管在 GitHub 或 AWS CodeCommit 中的源代码存储库。

设置和运行构建过程

构建过程自动化对于 CI 流程至关重要。设置构建过程自动化时,第一项任务是选择正确的构建工具。有许多构建工具,例如:

  • Ant、Maven 和 Gradle for Java

  • Make for C/C++

  • Grunt for JavaScript

  • Rake for Ruby

最适合您的构建工具取决于项目的编程语言和团队的技能集。选择构建工具后,需要在构建脚本中明确定义所有依赖项以及构建步骤。对最终的构建构件进行版本化也是一种最佳实践,这样可以更轻松地部署和跟踪问题。

构建

在构建阶段,构建工具会将对源代码存储库的任何更改作为输入,构建软件,并运行以下类型的测试:

单元测试 – 测试代码的特定部分,以确保代码执行预期的功能。单元测试由软件开发人员在开发阶段执行。在此阶段,可以应用静态代码分析、数据流分析、代码覆盖率和其他软件验证过程。

静态代码分析 – 此测试是在构建和单元测试后不实际执行应用程序的情况下执行的。这种分析可以帮助发现编码错误和安全漏洞,还可以确保符合编码准则。

暂存

在暂存阶段,将创建镜像最终生产环境的完整环境。将执行以下测试:

集成测试 – 根据软件设计验证组件之间的接口。集成测试是一个迭代过程,有助于构建稳健的接口和促进系统完整性。

组件测试 – 测试在不同组件之间传递的消息及其结果。该测试的一个关键目标可能是组件测试的幂等性。测试可能包括极大的数据量、边缘情况和异常输入。

系统测试 – 端到端测试系统并验证软件是否满足业务需求。这可能包括测试用户界面 (UI)、API、后端逻辑和结束状态。

性能测试 – 确定系统在特定工作负载下执行时的响应能力和稳定性。性能测试还用于调查、测量、确认或验证系统的其他质量属性,例如可扩展性、可靠性和资源使用情况。性能测试的类型可能包括负载测试、压力测试和峰值测试。性能测试用于根据预定义的标准进行基准测试。

合规性测试 – 检查代码更改是否符合非功能规范和/或法规的要求。它确定您是否正在实施且满足定义的标准。

用户验收测试 – 验证端到端业务流程。此测试由终端用户在暂存环境中执行,并确认系统是否满足要求规范的要求。通常,客户在此阶段会采用 Alpha 和 Beta 测试方法。

生产

最后,在通过之前的测试后,将在生产环境中重复暂存阶段。在此阶段,可以通过在将新代码部署到整个生产环境之前,将新代码部署到一小部分服务器甚至一台服务器上,或部署到一个 AWS 区域中,以完成最终 Canary 测试部署方法部分介绍了如何安全地部署到生产环境的具体细节。

下一节将讨论构建管道以合并这些阶段和测试。