DevOps 测试实践指南

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 软件开发公司一直在采用 DevOps,因为它有助于自动化和简化应用程序的开发生命周期。不仅如此,DevOps 还通过规划、沟通、流程和工具,更好地协调了开发团队和运维团队,从而提高了项目的交付质量和速度。但是测试 DevOps 的最佳策略是什么呢?本文将讨论 DevOps 的基本概念、生命周期、最佳实践以及我们应该使用的工具。

软件开发公司一直在采用 DevOps,因为它有助于自动化和简化应用程序的开发生命周期。不仅如此,DevOps 还通过规划、沟通、流程和工具,更好地协调了开发团队和运维团队,从而提高了项目的交付质量和速度。

随着 DevOps 的发展,企业要么使用敏捷+DevOps,要么只选择 DevOps 方式。

(敏捷是一个迭代过程,专注于协作、反馈和快速发布。)

但是,测试 DevOps 的最佳策略是什么呢?为了帮助大家,我们将讨论 DevOps 的基本概念、生命周期、最佳实践以及我们应该使用的工具。

什么是 DevOps?

DevOps 是一套工具、文化理念和实践,通过自动化和集成开发团队和运维团队之间的流程,提高了组织高速交付项目的能力。DevOps 强调跨团队的协作与沟通、团队授权和自动化。

在 DevOps 的方法论下,开发团队和运维团队并不是相互孤立的。这两个团队通常会合并为一个团队,开发人员负责应用的整个生命周期,从开发到部署和运维。此外,DevOps 团队拥有广泛的技能,并不局限于应用程序的某个功能或特性。

有时,安全和质量保证团队会在整个应用程序开发过程中与 DevOps 集成。在这种情况下,如果 DevOps 团队的重点是应用程序的安全性,那么它也被称为 DevSecOps。

与传统的手工实践不同,DevOps 团队使用技术栈和工具来自动化流程,从而可以自动、可靠、快速地构建应用程序。此外,DevOps 工具允许开发人员独立执行一些需要其他团队协助的任务,如配置基础设施或部署代码等任务。

DevOps 生命周期

DevOps 生命周期是持续开发生命周期中的一系列自动化流程。DevOps 生命周期采用迭代的方式,这就是实践者为什么会将其符号化为无限循环的原因。这个无限循环代表了一种持续和协作策略,其中包括应用程序生命周期中每个阶段的技术栈和工具。

生命周期的左侧处理应用程序的开发和测试,而右边则描述了部署和运维的循环。
image.png

让我们来概述一下 DevOps 的生命周期。

  • 计划(Plans):DevOps团队在计划阶段确定业务需求并收集用户的反馈。为了最大化业务价值并提供预期结果,开发人员还会在该阶段创建项目路线图。
  • 编码(Code):在这个阶段,通过使用诸如Git或GitHub之类的工具和插件来创建应用程序代码,并简化流程,最大限度地减少糟糕的编码实践和应用程序安全方面的缺陷。
  • 构建(Build):在构建阶段,开发人员使用 Gradle 或 Maven 等工具将代码提交到共享存储库。
  • 测试(Test):在测试阶段,将构建部署到测试环境中,这样就可以通过使用 Selenium、JUnit 等工具运行不同的测试(如安全性、用户接受度、集成、性能等)来确保应用程序的质量。
  • 发布(Release):当构建通过了测试,并准备好了部署到生产环境时,运维团队将会安排发布。
  • 部署(Deploy):在部署阶段,基础设施即代码(Infrastructure-as-Code,IaC)使用不同的工具来构建和部署生产环境。
  • 运维(Operate):一旦最终用户可以访问该版本了,运维团队将使用 Ansible、Saltstack、CFEngine 或 Chef 等工具进行服务器配置和资源调配。
  • 监控(Monitor):顾名思义,在监控阶段,根据收集到的应用程序性能、用户行为等信息来对 DevOps 管道进行监控。通过环境监控,团队可以轻松地识别出影响生产力的瓶颈。

从敏捷到 DevOps

即使 DevOps 和敏捷测试之间存在细微的差异,使用敏捷的人可能会发现 DevOps 更熟悉,并最终采用它。尽管敏捷的原则在开发和 QA 的迭代中得到了成功的应用,但在运维方面却没有那么成功。这就是 DevOps 的用武之地。

DevOps 现在已经用持续开发取代了持续集成,在持续开发中,团队在短周期内开发应用程序,这样软件就可以随时自动可靠地发布。使用 CD,可以以很高的频率开发、测试和发布软件应用程序。

由于 DevOps 中的流程和环境已标准化,因此持续开发过程能使整个链条中的每个人都受益。由于 DevOps 中的所有流程都是自动化的,因此,开发人员可以专注于设计和编码高质量的应用程序,而不是专注于构建、质量保证和运维流程。

使用持续开发可以极大地缩短代码编写和部署到生产环境的时间,最多可达 4 小时。

简而言之,DevOps 是一种敏捷的扩展,或者可以被称之为“类固醇上的敏捷”。

DevOps 测试的最佳实践

DevOps 测试工程师需要重新思考软件的 QA 测试策略,以适应从开发到运维的管道阶段。值得庆幸的是,有一些 DevOps测试最佳实践可以被理解并能被用于任何应用程序的开发中。解释 DevOps 的每个测试最佳实践超出了本文的范围。所以我们总结了 DevOps 测试的每一个最佳实践,并在下面给出了解释。

1. DevOps 测试文化

DevOps 的测试文化是有所不同的,因为跨职能团队成员共同承担了提供高质量应用程序的责任。质量检查是管道阶段的一个重要方面,涉及所有的团队成员。此外,质量测试不能由一个完全不同的团队在管道的末端进行。因此,团队需要确定测试策略,以控制整个应用程序开发生命周期中测试活动的范围和数量。

为了达到所要求的结果,跨职能团队的每个成员都必须对测试及其结果负责。

DevOps 测试文化应包括以下特征:

  • 鼓励围绕测试和测试结果分析进行协作,而不是测试人员和开发人员在代码修复方面进行对抗。
  • 测试覆盖率和创建条目需要得到DevOps团队的同意。
  • 领导者应该将测试视为项目开发的战略部分,而不是将其视为可以降低的成本。他们需要资金和时间预算来为 DevOps 团队想要的开发人员提供测试培训资源、框架、工具、管理并创建评估策略。
  • 开发团队应该接受测试创建和结果分析,而运维团队应该计划并执行跨功能测试。

2. 持续的测试策略

传统的瀑布式测试方法是在开发周期接近尾声时由独立的 QA 团队对应用程序中大量的更改进行测试,这种方法无法与 DevOps 配合使用。

随着 DevOps 团队在持续交付管道的所有阶段都测试小的更改,敏捷方法与 DevOps 测试更加兼容了。

虽然敏捷强调了持续测试的重要性以及将持续测试集成到软件工具中的必要性,但它没有定义将测试扩展到部署的方法。DevOps 所需的持续测试策略比瀑布式或敏捷式的更明确。持续测试策略必须要包括管道和部署所有阶段的集成测试。

3.端到端的测试集成

DevOps 需要跨端到端管道阶段的水平测试集成,以及跨不同级别持续交付基础设施的垂直集成。

下面列出了实现端到端测试集成的最佳实践:

  • 在集成之前,使用私有实例对应用程序中的更改进行测试,以确保代码的更改不会破坏分支。能做到这样的测试方法包括:静态代码分析、单元测试、性能测试、回归、扫描和功能测试。
  • 在预集成测试阶段,应该创建自动化测试,以便在管道的后续测试阶段继续使用。
  • 为了验证预集成测试的测试结果,DevOps 团队应该在提交代码时对代码进行评估。
  • 在构建阶段,应该执行测试,以确定集成的构建是否符合验收标准。
  • 为了确保构建镜像的性能和功能符合评估标准,必须在代码测试过程中进行性能和功能测试。
  • 类似地,在回归、系统测试和交付等其他阶段,也需要进行一组测试,以确保代码和应用程序符合预期的评估标准。

4. DevOps 测试基础设施

正在测试的应用程序可以具有单体、三层、面向服务或微服务的架构。DevOps 测试实践强调在类似于生产环境的环境中进行测试的重要性,这可以确保一旦部署到生产环境中,测试就可以覆盖应用程序的所有配置。

为此,最佳实践是找到并将基础架构即代码(Iac)、动态基础设施配置工具、云服务和测试即服务(test-as-a-service)包含进来,这些工具比专用基础设施更具成本效益和可行性,并且可以根据运行测试的需要轻松地建立并发布基础设施配置。

5. DevOps 就绪测试工具

持续交付测试工具必须提供对应用程序进行测试的能力,并提供能够验证测试结果所需的数据。你可以使用的一些工具,如功能测试工具、协议测试工具、API测试工具、单元测试工具、数据库模拟器、性能/负载测试工具和用户界面测试工具等。

测试工具可以是白盒工具、灰盒工具和黑盒工具。测试工具应该能够混合测试工具链和框架,以便用于 DevOps 就绪(DevOps-ready)工具。

这将在垂直或水平方向上增加按需伸缩的弹性,并能匹配工作负载的需求,以及通过持续交付管道测试应用程序更改的能力。可以通过 API 编排、伸缩、调用、控制和监控 DevOps 就绪工具。资源、采用快速失败的测试设计技术、测试框架配置,则加速测试结果的监控以及测试工具的配置。

6. 测试分析

如果对持续测试结果的分析不能跟上测试的速度,不仅会增加要分析的结果数量,而且还会导致无法节省时间、造成大量混乱并忽略有价值的结果,从而减慢 CI/CT 周期。一些可用于匹配测试及其分析速度的技术包括测试结果分析器、仪表板或向框架中添加分析工具。
**
**7. 微服务和容器

从测试的角度来看,在微服务架构中,需要验证每个服务与使用它的其他服务之间的契约。服务间的依赖性和微服务的独立性都应该经过很好的测试。

在网络上运行服务时,还需要验证可靠性和性能等考虑因素。如果微服务受到应用程序更改或相关依赖微服务组的影响,则需要对其进行回归测试。

容器提供了将测试资源打包到特殊容器中的可能性,以实现方便性和不变性,以及测试更改所需的可伸缩性。

8. 数据库 DevOps 测试

在持续交付的整个过程中,制定策略来测试和验证对数据库的任何更改或使用了数据库的应用程序是否按要求执行是至关重要的。此外,必须有可以用于从生产环境中复制数据卷的工具,以确保在部署之前能在生产数据集上进行测试。

9. DevOps 安全测试

通过制定 DevOps 安全测试策略,可以使应用程序更容易摆脱漏洞、威胁和风险的影响。DevOps 团队可以在开发周期中应用自动化工具和测试,最大限度地减少宕机时间、漏洞和安全威胁。

10. 自动化测试

为了消除持续集成带来的风险,添加能够提供快速应用程序质量反馈的测试自动化是至关重要的。使用 CI 进行自动化测试允许团队测试新代码迭代,并能将错误的可能性降至最低。

DevOps 测试工具

在软件开发生命周期中使用 DevOps 测试工具为开发和运维团队提供了多项优势。它提供的一些好处包括代码质量改进、快速和持续的反馈,以及加速了有助于增加开发、运维和测试团队的应用程序上市时间。
image.png

下面是可以用于 DevOps 测试策略的不同测试工具列表。

单元测试工具

通过单元测试,DevOps 团队可以单独检查应用程序的源代码,以验证其功能。单元测试甚至可以在应用程序的初始开发阶段进行。它依赖于模拟应用程序功能的测试用例。这些测试用例要么通过,要么失败,并向用户提供结果,以便他们调试代码。

有些单元测试工具是专门为给定的编程语言设计的。可以使用的工具有Mocha(用于 JavaScript)、 EMMA (用于 Java)、Typemock(用于.Net 和 C++)、Parasoft(用于 C 和 C++)和SimpleTest(用于 PHP)。

性能测试工具

性能测试是在 DevOps 的后期阶段完成的,即在编写和集成代码时。根据项目的要求,性能测试工具将对应用程序进行压力、负载、容量、卷和恢复测试,以检查应用程序的性能,以及它如何从异常中恢复。

使用工具进行性能测试的目的是在向最终用户发布系统之前,检测崩溃源并修改系统以获得最高效率。可以用于性能测试的工具有ApacheJMeter、k6、Watir、Predator和TestComplete。

自动化测试工具

自动化测试工具有助于自动运行测试、管理测试数据并使用测试结果来提高软件的质量。除了减少人为错误外,自动化测试工具还可以支持可伸缩的评估。CI/CD 模型中的自动化工具基于事件来触发测试。

DevOps 团队可以用于自动化测试的工具有TestProject、Leapwork、Selenium、Tosca和Testsigma。

持续测试工具

持续测试是测试应用程序的过程,有助于在 DevOps 管道的每个阶段进行代码、功能和应用程序验证,以检测错误并最大限度地缩短周转时间。

DevOps 团队使用的一些连续测试工具示例包括:AppVerify、Appium、Docker、Bamboo和Jenkins。

总结

DevOps 是为多种业务开发应用程序的理想解决方案,因为它有充分的理由。然而,应用程序的成功和质量完全取决于 DevOps 团队为测试应用程序所制定的策略。

我们希望本文能够帮助你为当前或未来的项目制定 DevOps 测试策略。

原文链接:

https://www.decipherzone.com/blog-detail/devops-testing

了解更多软件开发与相关领域知识,点击访问 InfoQ 官网:https://www.infoq.cn/,获取更多精彩内容!

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
3月前
|
弹性计算 测试技术 持续交付
阿里云云效产品使用合集之如何进行自动化测试
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
19天前
|
JSON 测试技术 持续交付
自动化测试与脚本编写:Python实践指南
自动化测试与脚本编写:Python实践指南
24 1
|
1月前
|
监控 数据可视化 测试技术
软件测试中的自动化测试实践指南
【10月更文挑战第7天】 在软件开发的生命周期中,测试是确保产品质量的重要环节。随着技术的进步和应用的复杂性增加,自动化测试逐渐成为提升测试效率和覆盖范围的关键手段。本文将深入探讨自动化测试的基本概念、实施步骤及其在不同应用场景中的最佳实践。通过对自动化测试框架的选择、脚本开发、执行及维护的详细解析,帮助读者更好地理解和应用自动化测试技术,从而优化测试流程,提高软件质量。
41 2
|
1月前
|
设计模式 敏捷开发 Java
软件测试中的自动化测试实践指南
本文旨在探讨软件测试领域中的自动化测试。通过详细的案例分析和步骤讲解,帮助读者掌握自动化测试的实施方法与最佳实践。
41 10
|
1月前
|
中间件 测试技术 持续交付
软件测试中的自动化测试实践指南
【10月更文挑战第4天】 本文探讨了软件测试中自动化测试的重要性,并详细介绍了如何有效实施自动化测试。从选择合适的工具到设计测试用例,再到实际执行与持续集成,我们将一步步引导读者了解自动化测试的全过程。通过具体案例分析,我们展示了自动化测试在提高测试效率、保障软件质量方面的显著优势。无论是初学者还是资深测试工程师,都能从中获得实用的指导和启示。
80 1
|
1月前
|
设计模式 敏捷开发 jenkins
软件测试中的自动化测试实践指南
本文旨在探讨软件测试中自动化测试的实施方法及其重要性,通过具体案例分析自动化测试的步骤、工具选择及最佳实践。我们将从自动化测试的基本概念入手,逐步解析其在实际项目中的应用,并提供一些常见问题的解决方案。
34 4
|
6月前
|
Ubuntu 安全 Docker
【DevOps】Docker 最佳实践指南(绝对干货)
祝您的 Docker 之旅一切顺利!
209 4
|
2月前
|
Devops jenkins 测试技术
DevOps实践:持续集成与自动化测试的融合之道
【9月更文挑战第29天】在软件开发的快节奏竞赛中,DevOps如同一位智慧的舵手,引领着船只驶向效率与质量的彼岸。本文将揭开DevOps的神秘面纱,探索其核心理念如何通过持续集成(CI)和自动化测试的实践,实现软件开发流程的优化与加速。我们将一同见证代码从构思到部署的旅程,以及这一过程中的关键技术和工具如何协同工作,确保软件质量和交付速度的双重提升。
|
2月前
|
敏捷开发 Java jenkins
软件测试中的自动化测试实践指南
本篇文章深入探讨了软件测试中自动化测试的重要性、实施步骤以及面临的挑战。我们将从为什么需要自动化测试开始,逐步解析其基本概念、工具选择、脚本开发、执行与维护等关键环节。同时,还将分享一些成功案例和最佳实践,帮助读者更好地理解和应用自动化测试技术。无论您是软件测试新手还是经验丰富的测试工程师,相信本文都能为您提供有价值的参考和启示。
169 7
|
3月前
|
运维 Java Devops
阿里云云效操作报错合集之在流水线增加单元测试报错,是什么导致的
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。