DevOps 中的持续测试

什么是持续测试?
连续测试 DevOps 中的持续测试是一种软件测试方法,它在软件开发生命周期的每个阶段验证应用程序的质量。持续测试的目标是通过尽早测试、频繁测试以及自动化所有可重复的检查,在持续交付过程的每个步骤评估质量。
持续测试流程将开发人员、DevOps工程师、质量保证专家、安全分析师和运维团队聚集在一起。每次提交都会触发自动化的单元测试、集成测试、API测试、性能测试和安全测试,使利益相关者能够立即获得反馈,了解构建版本是否可以安全地部署到生产环境。
持续测试与传统测试有何不同

传统的测试模式以交接为中心。软件按顺序从一个团队移交给另一个团队,开发和测试阶段是分开的。测试团队总是希望有更多的时间来确保质量,并且普遍认为质量应该优先于项目进度。
然而,现代企业需要更快的交付速度才能保持竞争力。产品越早到达最终用户,其潜在收益和反馈优势就越大。为了支持这种速度,一种以自动化和持续反馈为核心的新型测试模型应运而生。
持续性是指不间断地、持续不断地进行测试。在持续DevOps流程中,每个软件变更(候选版本)都会自动从开发阶段流向测试阶段,最终部署到部署阶段,无需人工交接。

代码会持续进行开发、交付、测试和部署。
例如,每当开发人员将代码提交到 Git 等源代码控制系统时,自动化构建服务器就会执行相应的操作。 JenkinsGitLab CI 或 GitHub Actions 会在持续集成流水线中执行一系列单元测试。如果测试失败,构建将被拒绝,开发人员会立即收到通知。如果构建通过,则会将其部署到预发布环境和性能测试环境,进行全面的功能测试、API 测试和负载测试,这些测试通常会并行进行。当所有测试都通过后,软件即可部署到生产环境。
持续测试是持续开发、集成和部署周期中必不可少的环节之一。

软件开发已今非昔比。发布周期从数月缩短至数周,在某些组织甚至缩短至数小时。当前的测试架构(见上图)仍然偏重于 UI 测试,但现代团队的目标是构建一个平衡的金字塔结构:底部是更多自动化单元测试和 API 测试,顶部则是更少脆弱的 UI 测试。
持续测试与测试自动化
虽然持续测试依赖于自动化,但两者并不相同。测试自动化是一种技术,而持续测试是一种策略,它利用自动化、基础设施和流程集成来实现持续的质量反馈。
测试自动化与持续测试
| 参数 | 测试自动化 | 连续测试 |
|---|---|---|
| 定义 | 测试自动化是指使用工具或软件来自动执行重复性测试任务的过程。 | 持续测试是一种软件测试方法,专注于在整个交付流程中持续提高质量和改进。 |
| 目的 | 一组相似或重复性的任务,机器可以更快、更准确地执行这些任务。 | 持续测试流程有助于发现风险、解决问题,并在每次发布时提高产品质量。 |
| 条件 | 无需集成持续测试,即可实现测试自动化。 | 如果没有测试自动化、版本控制和 CI/CD 流水线,持续测试就无法实现。 |
| 时间 | 软件发布周期可能需要数月甚至数年。 | 软件可以通过 CI/CD 按周、日或小时发布。 |
| 反馈 | 每次版本测试后都会提供定期反馈。 | 每个阶段的反馈都需要是即时的、可操作的。 |
| 历史 | 几十年来,自动化测试一直被用于加快测试过程。 | 持续测试是一个相对较新的概念,与 DevOps 和 DevSecOps 的兴起密切相关。 |
如何进行持续测试
实施持续测试需要流程变革、工具升级和企业文化建设的结合。以下步骤概述了现代 DevOps 团队如何将其付诸实践。
- 使用工具根据用户故事和需求生成测试自动化套件,包括人工智能辅助测试生成。
- 使用容器、Kubernetes 和基础设施即代码工具(如 Terraform)创建可复现的测试环境。
- 复制并匿名化生产数据,以构建真实、合规的测试数据集。
- 使用服务虚拟化和连接trac使用 t 测试在依赖项不可用时验证 API。
- 在 CI/CD 流水线中并行运行功能测试、性能测试和安全测试。
- 将质量关卡整合到 JenkinsGitLab CI、GitHub Actions 或 Azure DevOps 阻止错误构建。
- 利用可观测性和合成测试监控生产环境,将测试扩展到运行时环境。
持续测试工具
选择合适的工具链至关重要。以下是精选的最佳工具链列表。 持续测试工具 用于现代 DevOps 和 DevSecOps 流水线。
1) 查询激增
查询激增 是一款智能数据测试解决方案,也是首个面向持续数据测试的完整 DevOps 平台。其主要特性包括:功能强大的 API(支持 60 多个调用)、详尽的数据智能和分析、与 DevOps 流水线的无缝集成,以及快速验证海量数据的能力。
2) Jenkins
Jenkins 是一个被广泛采用的持续集成服务器,用以下语言编写: Java它可以通过图形用户界面或管道即代码进行配置。 Jenkins该文件与数千个用于测试、安全和部署的插件集成。
下载链接: https://www.jenkins.io/
3) GitLab CI
GitLab CI 是 GitLab 内置的 CI/CD 引擎,支持 YAML 定义的流水线、并行作业、基于容器的运行器和集成的安全扫描,使其成为 DevSecOps 中持续测试的有力选择。
下载链接: https://about.gitlab.com/
4) GitHub Actions
GitHub Actions 直接在 GitHub 代码库中提供事件驱动的工作流。它通过矩阵构建、可重用的工作流以及社区操作市场来实现持续测试。 Selenium, Cypress剧作家等等。
下载链接: https://github.com/features/actions
5) Selenium
Selenium 是一个开源的浏览器自动化框架。它支持所有主流浏览器,包括 Chrome。 Firefox、Edge 和 Safari。 Selenium WebDriver 用于自动化 Web 应用程序的功能测试和回归测试。
下载链接: https://www.selenium.dev/
6) Cypress
Cypress 是一个现代的 Java这是一个端到端的脚本测试框架,具备时间旅行调试、自动等待和紧密集成的持续集成(CI)功能。它常用于测试使用 React、Angular 和 Vue 构建的单页应用程序。
下载链接: https://www.cypress.io/
7)剧作家
Playwright 是一个开源的自动化库,来自 Microsoft 支持 Chromium、WebKit 和 Firefox 它仅需一个API即可实现自动等待、并行执行以及对API和移动模拟测试的内置支持。
下载链接: https://playwright.dev/
持续测试的好处
如果实施得当,持续测试可以将质量从一个阶段转变为一种持续的能力。以下优势解释了为什么它现在已成为DevOps的基础实践。
- 通过消除人工交接和审批延迟,加快软件交付速度。
- 通过持续向开发人员提供反馈来提高代码质量。
- 通过地图帮助评估确切的业务风险覆盖范围ping 测试用户旅程。
- 可无缝集成到 DevOps 和 DevSecOps 流水线中。
- 有助于在数小时内而非数月内创建敏捷可靠的流程。
- 通过持续反馈机制加快产品上市速度。
- 合并传统上各自独立的团队,以满足现代企业的需求,并消除开发、测试、安全和运营团队之间的脱节。
- 测试自动化通过在所有相关测试中保持相同的配置来提高一致性。
- 强调业务预期以降低业务风险。
- 通过服务虚拟化和临时环境提供无处不在的测试环境访问。
持续测试的挑战
持续测试具有很大的价值,但团队在大规模采用时经常会遇到以下挑战。
- 传统流程限制了开发和质量保证专业人员的文化变革。
- 缺乏DevOps技能以及在敏捷和DevOps环境中进行测试所需的合适工具。
- 异构测试环境无法准确反映生产环境。
- 传统的测试流程和不规范的测试数据管理。
- 代码集成周期过长会导致集成问题和缺陷修复延迟。
- 资源不足或测试环境不佳。
- 复杂的应用程序架构和业务逻辑限制了 DevOps 的采用。
- 不稳定的自动化测试会削弱信任并减慢发布节奏。
持续测试的最佳实践
以下最佳实践可帮助团队从基本的测试自动化过渡到成熟的 DevOps 持续测试。
- Shift 测试方式从编写代码的同时编写自动化测试向左移动,到使用合成检查监控生产环境向右移动。
- 保持测试金字塔的平衡,包含大量的单元测试、较少的集成测试和少量稳定的 UI 测试。
- 将安全扫描、依赖项检查和合规性测试集成到 CI/CD 管道中,以支持 DevSecOps。
- 利用人工智能驱动的自愈式测试自动化来减少 UI 和 API 测试的维护工作。
- 使用容器化代理并行运行测试,以缩短流水线持续时间。
- 将测试代码视为生产代码,进行代码审查、版本控制和指标评估。
- 测量缺陷率、覆盖率和平均缺陷检测时间,并随着时间的推移不断改进。
