最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

DevOps 测试基础实践指南

  • 2022-04-19
  • 本文字数:4920 字

    阅读完需:约 16 分钟

DevOps 测试基础实践指南

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


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


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


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


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

什么是 DevOps?


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


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


阅读:DevOps实际上做了什么


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


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

DevOps 生命周期


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


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



让我们来概述一下 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 中的所有流程都是自动化的,因此,开发人员可以专注于设计编码高质量的应用程序,而不是专注于构建、质量保证和运维流程。


阅读:Salesforce DevOps的优势和挑战


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


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

DevOps 测试的最佳实践


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

1. DevOps 测试文化


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


阅读:在Kubernetes上运行有状态应用程序——最佳实践及用例


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


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 测试工具为开发和运维团队提供了多项优势。它提供的一些好处包括代码质量改进、快速和持续的反馈,以及加速了有助于增加开发、运维和测试团队的应用程序上市时间。



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

单元测试工具


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


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

性能测试工具


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


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

自动化测试工具


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


DevOps 团队可以用于自动化测试的工具有TestProjectLeapworkSeleniumToscaTestsigma

持续测试工具


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


DevOps 团队使用的一些连续测试工具示例包括:AppVerifyAppiumDockerBambooJenkins

总结


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


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


原文链接:


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

2022-04-19 12:335523

评论

发布
暂无评论
发现更多内容

文生视频Sora模型发布,是否引爆AI芯片热潮

申公豹

人工智能

JAVA请求示例获取1688商品详情数据API接口item_get-获得阿里巴巴商品详情(按关键词搜索商品列表)

Anzexi58

API 文档

奇点云:SAFe框架下,我们对平台软件工程生产线做了4项改造

奇点云

大数据平台 制造业 奇点云

大模型+搜索:构建完整技术栈,为企业定制化注入新活力

百度开发者中心

数字 大模型 人工智能、

多种方式获取淘宝商品详情数据,关键词搜索商品列表,店铺ID获取店铺所有商品,按图搜索获取商品详情数据

Anzexi58

API 文档

对比传统主机,云主机贵吗?是否值得购买?

一只扑棱蛾子

云主机

深度解析:Allure报告如何提升你的测试效率?

测试人

软件测试 自动化测试 测试开发

WPF性能优化:性能分析工具

EquatorCoco

性能优化 服务器 WPF

7万张H100打造的Open AI文生视频Sora功能原理详解|Sora注册全攻略

蓝海大脑GPU

比特币价格突破62000美元,近一个月涨幅超过40%

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

盘点6个最受欢迎的 Vue.js UI 库

秃头小帅oi

骚操作之 持有 ReadOnlySpan 数据

八苦-瞿昙

C#

L2 网络 Mint Blockchain 正式对外发布测试网

NFT Research

blockchain NFT 测试网络

iPaaS如何实现安全通信保障

RestCloud

信息安全 ipaas

J17资本合伙人SKY LAI确认出席Hack .Summit() 2024区块链开发者盛会

TechubNews

立即报名|3 月 8 日北京,稳定性 & 可观测沙龙来了!

阿里巴巴云原生

阿里云 容器 微服务 云原生

AI PC的风刮到企业里,看英特尔vPro怎么做到的

E科讯

干货!Windbg 在 TDengine 内存泄漏调试中的应用与实践分享

TDengine

tdengine 时序数据库 内存泄漏 windbg

【数字永生】SaaS系统源码独立部署,行业独家!

青否数字人

数字人

IDC 中搭建 Serverless 应用平台:通过 ACK One 和 Knative 玩转云资源

阿里巴巴云原生

阿里云 云原生 容器服务

可用于智能客服的完全开源免费商用的知识库项目

不在线第一只蜗牛

架构 开源项目 技术栈 智能客服

请求示例JAVA获取淘宝商品详情数据API接口item_get-获得淘宝商品详情(按关键词搜索商品列表)

Anzexi58

API 文档

抢占市场先机:利用API商品数据接口激活您的数据资产

Noah

商用AI PC,能帮企业带来什么?

E科讯

BEANZ NFT 概览与数据分析

Footprint Analytics

blockchain NFT

用户使用433MHz无线模块时,出现偶尔无法收发数据的原因?

Geek_ab1536

『双向奔赴,绿动未来』 ——能效电气2024新品发布会

Geek_2d6073

探索基于Stable Diffusion的智能绘画大模型

百度开发者中心

人工智能 深度学习 图像 大模型

互联网大厂面试题解析之大疆一面

派大星

Java 面试题 互联网大厂面试

什么是渗透测试?有哪些类型?

小齐写代码

DevOps 测试基础实践指南_DevOps & 平台工程_Mahipal Nehra_InfoQ精选文章