发布于 2026-01-06 2 阅读
0

16 个 CI/CD 流水线最佳实践,助力测试自动化

16 个 CI/CD 流水线最佳实践,助力测试自动化

每个软件项目都包含一些“流程”和“实践”,以确保项目的成功执行和部署。随着项目规模的扩大,复杂性也会呈指数级增长。领导团队应尽一切努力,以增量方式开发、测试和发布软件,从而最大限度地减少(或避免)对客户已使用软件的影响。

在本文中,我将探讨 CI/CD 在测试自动化方面的最佳实践,以帮助您加快产品上市速度。

我们在之前的文章《什么是持续集成和持续交付?》中已经介绍过持续集成/持续交付 (CI/CD),并在文中讨论了它们的概念以及 CI/CD 流水线中使用的工具。在测试/验证阶段发现的每一个缺陷都要经过严格的开发、集成、测试和修复流程。如果这些工作都是手动完成的,将会耗费大量的人力和验证精力,因此在 CI/CD 中采用“测试自动化”是理想的选择。

在功能最强大的安卓在线模拟器上,测试您的原生应用、混合应用和 Web 应用在所有传统和最新移动操作系统上的运行情况

“部署流水线”及测试自动化在持续集成/持续交付中的作用

在持续集成/持续交付 (CI/CD) 流程中,部署流水线 (Deployment Pipeline )是一种自动化系统,负责自动测试服务器上可用的增量构建版本。由于整个过程都是自动化的,因此与手动测试相比,整体周转时间 (TAT) 将显著缩短。

在大多数情况下,完全自动化测试是不可能的。某些测试场景可能需要人工干预或人工观察来判断测试是否通过。尽管自动化是 CI/CD 流水线不可或缺的最佳实践,但识别哪些测试场景如果实现自动化会获得更好的结果,也被认为是 CI/CD 的关键最佳实践。

尽管使用自动化测试有很多好处,但在 CI/CD 流水线中使用测试自动化的一些主要好处如下:

  • 更快地解决缺陷——问题检测 -> 问题修复 -> 问题关闭。
  • 有效利用现有资源,例如测试人员、测试基础设施等。
  • 能够并行执行测试。
  • 测试计划和执行的一致性。
  • 自动化测试用例执行所需的技术技能最低要求。

这是一篇全面的端到端测试教程,涵盖了 E2E 测试的 定义、重要性、优势以及如何通过实时示例执行 E2E 测试。

如何在 CI/CD 流水线中充分利用测试自动化?

虽然 CI/CD 管道中测试自动化的范围可能因项目而异,但 CI/CD 有一些最佳实践可以应用于任何项目,无论其规模大小。

使用 LambdaTest 云平台,即可在 50 多种浏览器和操作系统组合上即时运行Playwright测试脚本。了解更多。

渐进式变革与及时沟通

开发人员可以采用“大爆炸”式方法来开发新功能或修复测试团队报告的问题。这意味着开发人员会选择一次性推送功能实现。虽然实现工作已经完成,但这种方法存在一些问题。主要缺点是,如果实现过程中出现问题,则很难隔离问题。

更明智的做法是将功能拆分成不同的子功能,并为每个子功能使用独特的功能标志。这种方法不仅有助于隔离潜在问题,而且在需要时还能方便地进行增量功能构建。此外,当最终功能(由多个子功能组合而成)推送到主线/生产分支时,这种方法还能降低出现集成问题的概率。

有些情况下,功能之间可能存在相互依赖关系,例如功能“A”依赖于功能“B”。在这种情况下,开发人员必须等待依赖功能完全完成才能继续开发下一个功能。通过合理使用存根和功能标志,两个功能的开发人员都可以避免死锁,因为存根用于已计划/正在开发的功能。一旦所需功能准备就绪,开发人员就必须移除基于存根的虚拟实现,这些实现仅仅是已知接口实现的占位符。

这项开发活动需要开发团队之间周密的计划和及时的沟通,才能最大限度地发挥 CI/CD 流水线中测试自动化的优势。任何违反此方法的行为都可能影响整体测试进度。

在本 Appium 教程中,您将了解 Appium 及其在移动自动化测试中的优势。了解 Appium 的工作原理,并学习如何使用Appium 对移动应用程序进行自动化测试。

识别可自动化的测试

如前所述,100% 的测试都实现自动化是不可能的,因为至少有一些测试用例,手动测试比自动化测试更有效。由于测试自动化是 CI/CD 流水线的核心,因此,识别哪些测试用例可以自动化是 CI/CD 的一项关键最佳实践。

可以实现自动化的测试主要分为两大类:

频繁执行的测试:如果此类测试由测试人员“手动”执行,则容易出错,因为测试人员一天内需要多次执行相同的测试,从而降低效率。以需要进行浏览器兼容性测试的 Web 产品为例。某些测试用例可能涉及在不同的浏览器/设备/操作系统组合上测试 Web 应用程序时截取屏幕截图。为每种组合截取屏幕截图可能是一项繁琐的任务。因此,自动化跨浏览器测试可以使测试人员腾出时间编写高效的测试用例

需要专业知识且依赖于特定测试人员的测试:如果项目关键阶段缺少具备测试执行所需领域知识的资源(开发人员/测试人员),则依赖这些资源可能会带来风险。因为只有该测试人员了解测试的前提条件和流程,他的缺席可能会影响整个项目的交付成果。通过在 CI/CD 流水线中集成测试自动化,可以避免这种情况,从而确保项目按时完成。

自动化测试还可以应用于许多其他场景,其目的应该是利用可扩展的工具和测试平台来帮助你实现这个大胆的目标。

一键迁移

如果能够一键将代码从一个应用环境迁移到另一个应用环境,那么将代码变更部署到生产环境的工作量将大大减少。

一个架构良好的 CI/CD 流水线应该具备一键迁移功能,因为它能减少不同操作之间(代码迁移过程中的)摩擦。选择提供此功能的优质云基础设施,并高效优雅地使用自动化测试,可以优化开发和运维流程。通过一键推送开发任务是 CI/CD 最佳实践的理想目标。

利用并行测试作为 CI/CD 流水线的最佳实践

CI/CD 的另一项最佳实践是并行测试执行。一旦确定了需要自动化的测试,下一步就应该将“并行执行”这一因素融入到测试方法中。将测试自动化作为 CI/CD 流水线的最佳实践,已经能够加速整个流程,但如果结合并行测试,效果会更好。您可以同时执行多个自动化测试,从而更快地获得结果。

如果所有测试都在同一台机器上执行,就无法获得并行测试的最佳吞吐量。这种情况会占用机器上的关键资源,例如 CPU、GPU 等,从而减慢该机器上运行的其他测试的执行速度。因​​此,测试执行的基础设施至关重要。对于 Web 应用/网站的测试而言,自建用于测试部署和执行的基础设施可能并非理想之选(就成本和可扩展性而言)。LambdaTest 正是为此而生,它能够帮助您在云端 Selenium Grid 上,使用 TestNG、Pytest 等测试自动化框架执行并行测试。该云端Selenium Grid包含 2000 多种浏览器及其版本。

在本 系统测试 教程中,您将了解系统测试的重要性以及系统测试过程的所有复杂细节。

从以往执行的项目中汲取经验教训

每个软件项目都包含不同的阶段,例如项目规划、需求收集、实施、测试、产品部署等等。每个阶段都蕴含着学习的过程,这些经验可以用于更好地规划和实施下一个项目。即使项目的性质有所不同,你仍然可以借鉴以往项目的最佳实践,从而加快当前项目各个阶段的进度,并避免重蹈覆辙。

你应该记录下用于加速 CI/CD 流程的测试自动化技术,将其作为最佳实践。你应该让你的团队成员(例如开发人员和测试人员)参与进来,探讨哪些测试自动化最佳实践可以复用,从而避免重复造轮子。例如,他们可能使用过一些测试框架,这些框架帮助我在更短的时间内获得了更好的测试结果。记录这些经验教训,这有助于制定完善的测试管理策略

为什么文档记录是绝对必要的?

有些项目需求会随着项目执行过程而发生变化/演变。同样,测试自动化策略的制定也应兼顾短期目标和长期目标。

尽管测试计划或测试策略可能会随时间推移而有所调整,但团队至少应该规范某些流程。规范化可能包括筛选出合适的测试框架、确定符合预算和需求的云基础设施、组建一支能够编写测试脚本(使用 Python/C#/Java 或其他编程语言)的自动化团队。此外,还应该制定备用方案(Plan B),以应对组织内部日程安排或整体业务的任何变化。

将这些事项记录下来非常重要,以便随时查阅。除了上述要点之外,文档还应包含一个章节,重点说明执行测试策略过程中存在的“风险和假设”。例如,测试计划/测试策略最初可能基于 4 名自动化工程师的资源配置;但由于某些不可预见的情况,您可能需要缩减团队规模。因此,您需要考虑与项目相关的所有不同参数,制定一个万无一失的测试策略。这份测试策略文档应该是一个动态更新的文档,即包含重要的时间节点和里程碑,并且应该进行版本控制,以便您可以随时查看文档并跟踪进度。

这是一份全面的 端到端测试 教程,涵盖了端到端测试的定义、重要性、优势以及如何通过实际示例执行测试。

代码开发与维护的中央存储库

在任何项目中,团队中都会有多名开发人员提交代码,这些代码可能是新功能的实现,也可能是 bug 的修复。同样,开发人员也会发起拉取请求,从服务器获取最新的代码变更。将源代码维护在中央代码库中至关重要,这被认为是 CI/CD 流水线的最佳实践之一。这样,开发人员就可以确保他们的代码变更与生产服务器上的最新源代码保持同步。

版本控制系统对于跟踪变更、识别差异以及维护一个便于跟踪应用程序构建的环境也很重要。

使用版本控制进行回滚

有些情况下,测试团队可能会遇到一些在之前的软件版本中未曾发现的问题;一个可能的原因是,被测版本中推送的修复程序产生了副作用。执行根本原因分析 (RCA) 有时会非常耗时,而生产环境中任何重要的功能都不能长时间处于不可用状态。

在这种情况下,提交修复的开发人员应该能够回滚他的更改,这样发布就不会停滞,他也能有更多时间重新审视他的实现。如果没有版本控制系统,这种无缝回滚是不可能的。回滚不仅限于源代码;它还可以扩展到文档、演示文稿、流程图等等。

这是一篇全面的 用户验收测试 (UAT) 教程,涵盖了用户验收测试的定义、重要性、好处以及如何通过实时示例执行用户验收测试。

舞台环境大致模仿制作环境

无论使用何种版本控制工具来跟踪代码变更,开发和测试环境的使用都是普遍存在的。开发团队可以为不同的客户群体使用不同的“开发分支”,但代码最终都会推送到生产服务器/预发布服务器。为了提高效率,预发布环境最好能够与生产环境完全一致。我观察到的一个常见错误与实时流量有关。预发布环境通常会忽略生产环境为了处理负载而必须经历的实时流量。以下列出了预发布环境导致组织效率低下的 13 个原因

这种方法使得将工作代码从预发布服务器部署到生产服务器变得轻松便捷。事实上,开发人员也应该拥有足够的灵活性,只需点击一个按钮即可创建和设置新的环境。Jenkins 等工具可以帮助实现这一点。开发团队和 DevOps 团队使用通用工具对于简化 CI/CD 流程的最佳实践至关重要。

这是一篇全面的端到端测试教程,涵盖了 E2E 测试的 定义、重要性、优势以及如何通过实时示例执行 E2E 测试。

让相关利益相关者参与测试代码开发

在测试自动化规划、开发和执行过程中,让合适的利益相关者参与进来至关重要。由于团队中的开发人员能够为测试工程师实现的测试代码增添更多价值,因此让他们参与测试用例的实现是理想的选择。开发人员对架构、编码技术和软件开发最佳实践有着更深入的了解。经验丰富的质量保证工程师可能对测试基础设施、测试框架等有更深入的了解。因此,开发人员与质量保证工程师的协作可以减少测试用例开发所需的工作量和时间,从而加快持续集成/持续交付 (CI/CD) 流水线的测试自动化速度。

在时间紧迫的情况下,开发团队可以不让测试团队参与就着手编写自动化代码,这样就不会延误自动化测试的实施。但是,最好还是让相关利益方参与进来,特别是质量保证工程师和开发人员,共同参与测试用例的实施。

在 CI/CD 流水线中融入反馈机制,以构建稳健的测试自动化策略

测试策略文档详细规划了自动化测试及其他测试相关活动的执行方式。除了根据需要更新测试策略外,还应利用反馈机制及时更新 CI/CD 流水线中自动化测试的代码。

这些反馈可用于了解用户的痛点,并获取有关自动化测试基础设施整体使用情况的更详细信息。例如,测试自动化工程师和 DevOps 团队可能会在短期测试中对基础设施有一些观察结果。这些观察结果可能与日志捕获方法、将用 Python 和 Selenium 实现的自动化测试代码移植到用于测试的云基础设施、测试执行性能等相关。

所有这些反馈都应该记录在一份文档中,相关的反馈应该作为最佳实践纳入 CI/CD 自动化管道,以便测试代码与当前需求保持同步。

在本篇 即席测试 教程中,我们将深入探讨即席测试的定义、优点、缺点、类型、特点及其最佳实践。

频繁代码提交实现 CI/CD 流水线测试自动化中的微敏捷性

开发人员根据规范中列出的需求开始开发。实现完成后,开发人员会对代码进行单元测试,并修复测试过程中发现的问题。由于单元测试是独立测试,因此开发人员应该能够修复与集成无关的问题。本地测试完成后,开发人员会将代码推送到代码仓库。在大多数开发环境中,代码通常会推送到“开发分支”,经过审核和测试后,才能推送到“生产分支”。

因此,应鼓励开发人员更频繁地提交代码变更,以便于跟踪变更。团队中的开发人员应认真遵循这一重要的 CI/CD 最佳实践,从而在 CI/CD 流水线中实现与开发和测试自动化相关的活动的微敏捷性。

无缝协调!记住,这是持续集成+持续交付!

CI 和 CD 是两个独立的流程,但并非密不可分。CI 流程中的任何延迟或疏漏都可能影响 CD 流程的产出。虽然自动化可以提高 CI/CD 流程的效率,但在许多方面,自动化可能并不奏效。

沟通与协作是持续集成/持续交付 (CI/CD) 流程最佳实践的关键支柱,因为产品规划团队、开发团队、验证团队、DevOps 团队等多个团队必须协同合作才能确保项目成功。因此,与这些领域的佼佼者进行 CI/CD 流程标杆学习至关重要,这被视为 CI/CD 流水线优化中的关键最佳实践,能够提供宝贵的意见和建议。

此外,请记住,任何项目都不能孤立进行,因为总会有人依赖于你的工作成果。要做到这一点,项目利益相关者之间必须进行有效的沟通。例如,你的质量保证工程师可能正在编写一些测试用例,但这些用例并未涵盖所有需求。如果执行此类测试,由于测试用例/测试套件的实现遗漏了重要的场景,你可能无法获得良好的测试覆盖率。

先执行较小的测试用例,保持简单有序!

我在许多项目中都发现,在进行 CI/CD 流水线的自动化测试时,我们常常忘记系统地对测试用例进行优先级排序。我的意思是,作为 CI/CD 的最佳实践,我们始终建议先执行较小且简单的测试用例,然后再执行较长且复杂的测试用例。

这样,您就可以确保各个测试用例的覆盖率和性能,从而实现独立进行的功能测试。而用于检查多个模块之间交互的复杂测试用例可以稍后再进行!

团队内部及团队之间的透明度

许多项目的开发团队和质量保证团队分布在不同地区。除了需要密切协调以确保每位团队成员步调一致之外,更高的透明度也能让项目进展得更加顺利。持续集成(CI)正是在这方面发挥着重要作用,因为它能为团队的关键利益相关者带来亟需的透明度。

有了持续集成 (CI),团队就能更清楚地了解测试的整体状态,以及如何提高测试效率。这正是它如何促进团队和项目利用集体智慧的体现。确保所有成员步调一致至关重要,尤其是在远程办公的情况下。项目管理工具可以作为 CI/CD 流程的最佳实践,发挥巨大作用。使用项目管理工具,每个人都能了解其他团队成员的活动以及任务的截止日期。以下是19 款适用于软件测试团队的顶级协作工具

需要一款出色的跨浏览器测试解决方案,用于在 Safari 浏览器上进行在线测试吗?忘掉模拟器吧——使用真正的在线浏览器。试试 LambdaTest 在 Safari 浏览器上的表现。

选择合适的 CI/CD 流程工具

以上所有技巧和实用建议都能帮助您运用 CI/CD 流水线的最佳实践来加快自动化测试的速度。不过,最终 CI/CD 流水线的速度很大程度上取决于工具。市面上有很多 CI/CD 工具,您应该根据预算、需求和经验选择合适的工具。一些常用的 CI/CD 工具包括 Jenkins、Travis CI、GitLab、TeamCity、Codeship 和 Circle CI 等。

在最终确定使用哪个工具之前,我们强烈建议您仔细权衡该工具的优缺点,因为在开发过程中 CI 工具的任何更改都可能影响您的交付成果和截止日期。

选择合适的 CI/CD 流程工具

LambdaTest 的 CI/CD 工具与在线 Selenium Grid 集成

说到 CI/CD 工具,这里有一个额外的小技巧:LambdaTest 提供了一个 Selenium 网格,它与你可能正在使用的每个 CI/CD 工具都兼容,因此你可以加快跨浏览器测试工作。

在本篇 数据驱动测试 教程中,我们将深入探讨数据驱动测试的定义、优缺点、类型、敏捷环境下的数据驱动测试、优势及其最佳实践。

结论

测试自动化是整体测试策略不可或缺的一部分,但必须精心规划和执行。在测试自动化的许多方面(尤其是在基础设施方面),您可以巧妙地利用现有资源,而无需投资建设内部测试基础设施。基于云的测试凭借其可靠性和可扩展性,可以简化您的整体测试自动化策略。这些优势不仅能激励团队成员,还能让您充分利用 CI/CD 流水线的最佳实践。

在本 Appium 教程中,您将学习 Appium Automation 及其在移动自动化测试中的优势。了解 Appium 的工作原理,并学习如何使用 Appium 测试您的移动应用程序。

相关帖子:

  1. 如何使用 Selenium 测量页面加载时间?
  2. 2019年成为一名成功的自动化测试人员需要掌握的7项技能
  3. 专业测试人员如何在 Selenium 自动化脚本中使用 CSS 选择器?
文章来源:https://dev.to/lambdatest/16-best-practices-of-ci-cd-pipeline-to-speed-test-automation-1agb