4006-998-758
新闻动态

DevOps中的测试实践指南

2021-11-01


陈晓鹏 ——中国商业联合会互联网应用委员会智库专家、ISO29119软件测试国际标准评审组专家,暨南大学信息科学技术学院校友导师,原埃森哲金牌讲师。拥有MBA,PMP,CSM,SAFe Agilist,LeSS Practitioner及EXIN DevOps Master/DevOps Professional/DevOps Foundation全系列DevOps认证,20年IT领域相关工作经验,超过13年在IBM、埃森哲、德勤等国际顶尖IT咨询及世界五百强公司工作,现为某中国著名互联网大厂项目管理专家。


DevOps中的测试实践指南(图1)


DevOps强调开发和运维融合,这是我们大家都很熟悉的说法。但很多测试人员不禁会问,DevOps没有出现Test这个词,是不是意味着DevOps和测试没有什么关系了?其实这是个误解。在DevOps中的Dev是一个广义的”开发“,它本身就包含代码开发、构建和测试的内容,所以并不是说DevOps中没有测试了。为了让大家更清楚的了解测试在DevOps中是如何执行的,我特意翻译了Carlos Granda写的这篇文章:《DevOps中的测试实践指南》,原文链接如下:

https://apphawks.com/blog/testing-in-devops-a-practical-guide-to-testing-in-devops/


让我们看看在DevOps中测试的是什么。在软件移动应用开发与测试领域,近几年来,开发与测试并举的趋势最为明显。开发、测试和运维的融合即DevOps。


DevOps是一个多头动物:它是一种哲学,是一种实践,是一种文化,是一种伦理,是一个框架,是一个持续的反馈循环。


它已经被开发社区很好地采用和接受,以至于DevOps和目前正在部署和使用的DevOps测试套件似乎是不可阻挡的,并且正在以惊人的速度发展。

— 1 —

DevOps和DevOps测试的目标

DevOps的目标和目标几乎涵盖了整个应用交付管道的每一个方面:


  • 部署高频率

  • 更快地适应市场价格;

  • 降低发布的失败率

  • 减少系统更新的停机时间


文化理念、实践和工具的融合,提高开发团队快速交付应用程序和服务的能力:以更快的速度改进产品,使组织能够更好地服务客户,并在市场上更有效地竞争。



DevOps中的测试实践指南(图2)


"DevOps走过了漫长的道路,在软件开发领域创造了许多权威。今天,每个组织都希望接受这一点,并在行业中前进。对于DevOps来说,有很多工具和平台,顺便说一句,DevOps不仅仅是关于工具或者自动化的,它的意义远不止于此。"


分析师Pavan Belagatti在他的博客中写道。


如下图所示,DevOps的采用将继续下去。



DevOps中的测试实践指南(图3)

DevOps中的测试实践指南(图4)


根据Statista的数据,许多商业组织正在采用DevOps,与2017年的10%相比,2018年的增长率高达17%。

— 2 —

在DevOps中测试什么?

实际上,在DevOps中测试是在开发人员、QA测试人员和操作团队之间的目标、技能和沟通的重叠部分之间的一种微妙的平衡。


可以肯定地说,DevOps测试已经建立在开发过程中,并且合并技能工具箱以及最有效的软件应用程序开发工具。


DevOps非常强调所有团队之间的协作和沟通,如下图所示。



DevOps中的测试实践指南(图5)


— 3 —

DevOps过程:6C

DevOps哲学的核心被称为6C,每个术语都有一个“持续”的单词,我们将对每个术语进行更深入的研究:


  • 持续计划

  • 持续集成

  • 持续测试

  • 持续监控

  • 持续交付

  • 持续开发



DevOps中的测试实践指南(图6)


持续计划


持续计划将运营团队、测试人员、开发人员和业务分析融合到一个平台上,旨在实现一个清晰的发布计划,用于部署和更新。


持续集成


在软件开发中,开发人员经常将他们的代码变更合并到中心存储库中,然后执行自动化的构建和测试。


“持续集成的关键目标是更快地发现和解决bug,提高软件质量,减少验证和发布新软件更新所需的时间”


DevOps运动的领导者Amazon Web Services (AWS)表示。


持续测试:手动和自动


为了确保一流的产品质量,持续测试员工对微服务体系结构的使用,每个服务在自己的流程中运行,并通过典型的API与其他服务通信。 


DevOps中的自动化测试利用了几个不同框架或编程语言的能力,并独立实现它们。


持续监控


与持续测试一样,监视大量的更改、更新和发布,以确保持续和无缝的功能,同时不断扫描所有系统,查找可能出现的bug和新错误。


持续交付


在DevOps世界中,代码更改会自动构建、测试,并为发布到生产环境做好准备,这将为开发人员提供一个已经通过所有严格的QA测试流程的部署就绪的构建。


持续开发


这里的目标是DevOps允许以自动化和预先测试的方式将所有更改发布到生产环境中。

— 4 —

DevOps:增加配置、沟通和协作

在DevOps中,代码用于自动化标准化的、可重复的操作系统和主机配置,使开发人员和系统管理员不再关注基本的IT管理,而是关注移动应用程序的实际改进。


DevOps的使用本质上是一种协作,将开发和运维的工作流和职责结合在一起,允许他们通过使用聊天、支持/报告ticket系统和知识库系统来更好地共享信息。



DevOps中的测试实践指南(图7)


正如上面的信息图表所示,DevOps创建了一个连续的反馈循环,在这个循环中,应用程序的规划、编码、构建和测试自动地反馈到发布、部署、运行和监控应用程序以获得最佳性能的生产周期中。


这不仅仅是测试。但是在6c的第三个C表示,这是一个持续的测试,就像一直在进行,没有停止,没有结束的测试。简而言之,DevOps不会停止,不能停止进行更多的测试。

— 5 —

面向开发人员和测试人员的顶级DevOps工具

根据hackr.io的Mayank Tripathi的说法,以下是目前可用和广泛使用的顶级DevOps工具的简要介绍


1. Slack


Slack是团队用于项目有效协作的顶级沟通工具包的领导者,它允许“开发人员在与其他维护和服务成员沟通的相同环境中使用工具链进行协作。”


2. Jenkins


作为一个持续集成服务器,Jenkins自动化了一个应用程序的完整构建周期。这个开源工具有一个管道,“开发人员可以利用它自动将代码提交到存储库中,运行测试用例,以及获取测试后获得的报告。”


3. Docker


Docker采用了容器化,允许对应用程序进行安全打包、部署和运行,无论在什么运行环境中。利用Docker引擎,“容器可以被访问,从而可以在远程环境中执行应用程序。据报道,三分之二的公司在试用该应用程序后30天内采用了它。”


根据其他的在线技术报告,一个名为Kubernetes的DevOps工具正在成为发展最快的容器技术,并拥有成熟的开源社区。



DevOps中的测试实践指南(图8)


— 6 —

如何在DevOps中进行测试

但是让我们更深入地研究一下如何在DevOps生态系统中进行实际测试。首先要注意的是,DevOps是敏捷模型的延展,它在整个开发和测试环境中产生了冲击波,并极大地改变了应用程序的发布频率。


以前,应用程序是一个字节一个字节、一步一步开发出来的。敏捷模型试图在开发、测试和最终发布之间架起一座桥梁。


DevOps采取了一些被描述为“更进了一步”的措施,实际的敏捷团队不断发展,以处理整个应用程序创建周期的各个方面和细微差别:开发、测试和部署。


这到底是什么样子呢?Dan Ashby很好地总结了DevOps中的测试。


他称之为:代码审查、探索性测试、单元检查,还有结对的开发人员与他们相应的测试人员伙伴一起工作,他们每一步都在一起做他们的工作,在DevOps高速公路上互相支持。


“如果你是一个开发人员正在编写一些代码, 你可以与测试人员结对,这些测试人员会分享一些很酷的测试想法,不同的风险,不同的交互,不同的角度,不同的变量和不同组合等。所有这些事情帮助你得到正确的软件”。


然而,Ashby关于整体测试如何影响整个DevOps生命周期的观点有什么特别酷的地方呢?看看他下面的图表。



DevOps中的测试实践指南(图9)


这个图表最重要的是证明了在整个周期的每一点,每一步到下一个阶段之前,都必须有一个测试。


换句话说,只有正向的测试结果才能让团队继续前进,只有完美的结果才能让他们在DevOps无穷大形状的通道上获得绿灯。


测试一切:DevOps测试想法、如何将想法进行分支、对想法进行编码、对想法的合并和构建,以及对想法的发布、部署、操作和监控。

— 7 —

如何在DevOps中自动化测试

当然,如果没有最近在测试自动化方面的进展,持续测试场景就不可能存在。


利用更快速、更强大的处理机器的能力,以及对存储在网络上的多个云中的大数据的无限访问,DevOps中的自动化测试是测试行业中一个蓬勃发展的领域。


正如我们在上面看到的DevOps是如何要求测试保持不变的,测试所有的事情,DevOps也总是倾向于自动化……你猜对了……所有的事情。


和这些自动化测试覆盖的彩虹色域的功能测试,性能测试,弹性测试,当然,安全测试,测试越来越重要的时代,Firefox浏览器想要监控检查你的登录某些网站,这些网站为他们过去的安全漏洞或侵犯隐私的问题。


本质上,正如Ham Vocke在他的电子书《测试金字塔实践》中建议的那样,DevOps中的自动化测试都是关于设计一个可靠的策略。


他将它与构建一个测试金字塔联系起来,在这个金字塔中,更高层次的测试是建立在已经稳定的测试循环的坚实基础之上的,这些测试循环主要由底层的单元测试、中间的服务测试和顶层的UI测试组成。


这说明了以下DevOps测试原则:金字塔的底部需要更快、更独立的测试,而顶部代表更慢、更集成的测试。



DevOps中的测试实践指南(图10)


“坚持金字塔的形状,以得到一个健康、快速和可维护的测试套件:编写大量小而快速的单元测试。编写一些更粗粒度的测试和很少的高级测试来从头到尾地测试您的应用程序。”Vocke写道。


能够编写可靠的单元测试,从而设计单元架构来设置测试数据,在每个测试下调用您的方法,并最终“断言返回了预期的结果”。


与集成测试和契约测试类似,需要在与数据库和API交互的最简单方法上构建基本结构。


对于UI测试,Vocke建议“基于Selenium的测试将是你最好的选择”,因为他们提供了你的应用在不同操作系统和设备上运行的屏幕截图,并可以报告各种可用性问题,以及给设计团队“它看起来有多好”的建议。


您可以这样称呼它:一个测试套件,一个测试组合。但很明显,自动化测试在DevOps世界中需要一套预先设计好的工具链(类似于比特币的区块链),一套工具链,没有一个比另一个更具有等级重要性,但它们共同构成了一个无价的安全网,100%通过,100%通过自动测试。


Vocke还建议:“是的,如果我们的职业能在一些定义明确的术语上达成一致并坚持下去,那就太好了。不幸的是,这还没有发生。


由于在编写测试时存在许多细微差别,所以它实际上更像是一个范围……这使得一致命名变得更加困难。”

— 8 —

在DevOps中测试面临的挑战

没有人不同意:一家采用DevOps的web应用公司肯定会带来一些惊人的好处,但是与所有与物联网相关的事情一样,实施和执行过程也会给团队带来一些挑战。


以下是移动应用采用DevOps最常见的三个挑战:


  • 高度分散的平台,包括多个操作系统/Android版本,跨越广泛的设备和硬件,如手机、平板电脑和可穿戴技术。

  • App Store的不同:针对Android的Google Play Store和针对iOS的App Store,移动应用程序必须经过提交和审核过程。

  • 从用户的角度来看,每个人仍然有权利不随波逐流,可以拒绝下载和安装最新的更新,从而破坏了整个push部署模型。

— 9 —

DevOps中的归属指标

与DevOps的所有事情一样,团队能够不断地监视和扫描度量标准和日志,以查看最终用户的每一步操作中的性能因素。


数据必须被捕获、分类,然后用生成的类似的新日志进行分析,这将提供关于未来如何更好地调整应用程序的性能和稳定性的见解。


主动监控应用程序还可以在对应用程序的服务进行实时分析时生成警报。


以下是必须被24/7监控和跟踪的DevOps指标的简短列表:


  • 部署频率

  • Volume变化

  • 部署时间

  • Lead Time

  • 客户tickets

  • 自动测试通过率

  • 缺陷逃逸率

  • SLA

  • 失败的部署

  • 错误率

  • 应用程序使用、流量和性能

— 10 —

DevOps中的测试:总结

DevOps是所有事情都在同一时间完成的,没有一秒钟是可以浪费的。


在这个拥有数百万部署、发布和用户的世界里,只要一秒钟的应用程序崩溃,就会永远失去用户的惠顾。


让它变得完美的唯一方法,不是第100次而是第一次,就是采用DevOps策略,将应用程序测试的重要性提升到无限的共同创造应用程序的构建过程中。







随着近几年敏捷及DevOps的流行,越来越多的公司开始搭建自己的DevOps流水线,DevOps对于交付速率的提升起到了很大的作用。但是如何让DevOps在提升交付速率的同时,可以真正有效地提升交付的质量?测试人员应该如何与DevOps工程师配合,把质量融入到DevOps流水线中?


这些问题非常值得我们思考与研究。即将于11月19-20日,在上海举办的“K+全球软件研发行业创新峰会”将就科技企业技术研发方向,特设工程创新、管理创新、产品创新、技术创新和效能创新五大分论坛。融合数字化转型、产品创新、运营和增长、云原生、DevOps创新、质量创新、微服务、高并发架构、智能金融、应用性能优化、工具的革命等十几大专场。陈晓鹏老师将作为效能创新分论坛的重要演讲嘉宾,作《基于DevOps的质量左移与右移思考》的主题演讲。并将就“DevOps”以及“质量”两个关键词的融合作为切入点,来探讨DevOps下质量保证应该如何着手开展,从而在提升交付速率的同时也能保证交付的质量。


感兴趣的同学赶快扫码报名!获得与陈老师面对面交流机会吧!

返回列表