什么是devops?随着时间的推移,devops的定义也在不断的演进。对于其定义可能出现千人千面,但从核心观点,整体业界还是保持着一致的认识。DevOps不是单一的技术或者工具,甚至不只是一个流程,他包含应用设计、敏捷开发、持续交付和监控运维等一系列流程,涉及到企业文化、团队协作流程等多个方面,它可以被理解为一系列可以高速、高质量进行软件开发的工具链。
结合软件生产全生命周期来看,devops落地实践的核心目标是缩短开发周期,提高部署频率和更可靠的发布。
DevOps的诞生源于企业要适应这个瞬息万变的市场,能够做到持续交付。正如《持续交付2.0》作者在书中精炼的2个环:价值探索和快速验证。
快速验证环的两个核心关键是质量与速度
它会要求以最可靠的质量和最快的速度,交付最小可行方案,可靠地收集真实反馈,来形成这样的闭环。对于质量来讲一个核心的实践就是质量内建,有一个公认的事实。那就是在整个持续交付全生命周期过程中,缺陷越滞后发现,所需要的成本就越高。质量内建就是要从生产过程中的第一个环节开始,就要注重产出物的质量,并且在每个环节中都要去开展质量保障活动,这就要求在软件全生命周期参与的各个角色都需要实时的对软件的质量负责。确保软件在交付到下一个环节前有了基础的质量保障。其核心目的就是减少因为质量问题导致的返工,避免浪费大量人力成本。
速度,得益于在软件全生命周期过程中每个环节有效的开展自动化,进而做到“持续”两个字,比如持续构建、持续测试、持续发布、持续运维。
对于快速验证环,从测试的层面,是如何落地实践的。让我们聚焦于接口,这个软件产物中必不可少的核心组成部分。从接口的全生命周期出发,介绍接口管理、测试、监控。接下来会围绕网易易测团队输出的接口全生命周期协作平台GoAPI出发,从痛点梳理、平台的设计、测试左移和右移实践、接口监控闭环建设等几个部分阐述是如何实现对于接口的“快速验证环”
1.接口全生命周期
什么是接口全生命周期?可以从如下的一张图来理解
结合软件研发流程来看的话,接口全生命周期包含了接口定义、编写、测试、上线应用、运维监控、回收下线等阶段。在接口的不同生命周期过程中,围绕着质量内建的思想,其实是需求开发/测试/运维等角色去开展各种质量保障活动。
在实践的过程中,一个典型的现象是接口的质量保障还是测试这个角色在接口测试及回归阶段进行,这种现象出现可能有两种团队形态,一是开发、测试、运维三个角色分工明确,大家都聚焦于自身角色的一些目标。二是大家都在积极的开展着质量活动,但是在实施过程中发现会遇到各种阻碍和痛点。
那么在接口全生命周期中有哪些核心的痛点,可以从以下4点来进行分析
-
接口定义管理与同步难:传统接口定义多是文档化管理,文档更新则往往不及时,当接口发生变更时,时常不能及时同步到下游的测试团队。
-
自动化门槛高:数据准备、用例编写、用例执行和任务的编排都有较高的准入门槛
-
角色及使用阶段受限:传统模式下的接口测试只局限于测试人员在版本回归阶段使用,缺少协作
-
线上接口监控难:因代码变更导致的接口异常、偶发性的接口错误、线上服务宕机等异常行为缺乏有效的监控与发现手段。
围绕以上痛点,从质量内建的目标出发,从测试左移和右移的视角去思考,可以看到如下图示的典型问题及阶段变化
-
第一个问题:测试需要更多的时间关注在接口定义层面
从接口定义开始,涉及到一个核心点在于接口管理,目前的一些管理方式中包含Swagger和Postman等形式,类似Swagger这种管理属于静态的,在接口变更时缺乏及时性通知机制,往往会存在测试人员在测试过程中才会发现接口已经发生变更,这无疑会导致项目交付周期延长。
-
第二个问题:接口自测冒烟在开发与测试之间没有形成很好的协作。
同一件事情被多人重复做了
开发人员在开发完一个API接口,会部署到开发环境中,然后通过自己写自动化脚本或者利用 POSTMAN工具验证一下这个API 接口是否符合预期,这时候其实已经做过一个简单的API测试了。到了提测阶段开发会将写好的API接口文档给测试人员,测试人员会部署代码到测试环境中去,然后通过 TestNG 或者其他自动化测试框架写接口测试用例,我们发现,API的正向用例测试,开发人员做过一次,测试人员用不同的方式又做了一次?
开发提测的质量不可度量
开发人员提测,测试人员进行冒烟验收,一般只是执行一下冒烟测试用例,提交接口文档,口头叙述一下这些接口我在开发环境都验证通过,符合提测标准了。但是对于测试人员来讲这个口头叙述是没法来度量提测的质量的,测试人员缺少客观的数据来评估接口的质量是否符合预期,从而导致后期因为质量问题出现版本回退的现象,拖延了版本交付周期。
-
第三个问题:API 接口的变动引起的叠加效应
API 接口变动是常有的事情,但是现有的流程中,一个接口的变动会牵扯出一系列的变动,接口文档的变动,接口测试用例的变动,接口测试代码的变动,持续集成的变动......, 时间成本瞬间提高。有没有办法只要一个地方修改了这个变动,那么其他所有的事情都解决了呢?
围绕着接口全生命周期管理与测试中的典型痛点及多角色间协作的问题,网易易测经过多年的技术经验积累和业务实践,打造了GoAPI接口协作平台。它是围绕接口全生命周期管理、提升研发与测试效率为目标的团队协作平台。平台提供便捷的接口管理,无门槛与多维度的自动化测试,完善的OpenAPI扩展等多种丰富能力,大幅降低企业研发和测试成本。
接下来会重点介绍它的设计思路和应用实践
2.整体设计思路
从核心目标、设计理念、实践应用的几个维度来看下整体的设计思路
-
核心目标:减少投入成本和增加收益
针对接口管理与测试,需要关注的一个核心是投入产出比,这会涉及到两个指标:减少投入成本、增加收益。减少投入成本可以从以下几个方向去考虑:减少用例编写的成本、减少用例维护优化的成本、减少依赖工具开发、数据构造的成本。而增加收益,我们都知道自动化每执行一次它就发挥一次价值,那么增加使用率,也就能增加收益;而要做到增加使用率有几个方面可以考虑去实施:做到人人能用,手工能用、能当工具用、同时接口全生命周期各个阶段都能用。
-
设计理念:可视化、可协作、可追溯
可视化,需要做到2个0,0框架入门成本,如此才能不需要再关注自动化框架要如何去做封装,如何去做业务分层和数据驱动等等;0编码用例编写,只需要拼装好参数执行就可以,不再吐糟这是谁写的测试代码。
可协作,在前面分析痛点的过程中一个很重要的点就是多角色共建共用;何谓共建,开发与测试共同完成接口测试用例,何谓共用,让每一个角色都能够轻而易举的去使用已有的接口自动化测试案例
可追溯,真正实践的过程中,当接口量级达到1万+时,可追溯就变得很重要了,其中会包含失败分析,得具备便捷高效的快速定位的能力。同时要针对性的展开数据统计分析,从不同维度和不同粒度去开展。
3.应用实践
可以看到整个接口全生命周期的各个角色都围绕着GoAPI在实施活动,以上是一个单产品的统计数据,达到了1万+接口,5万+用例,5千万+执行次数。在整个实践应用过程中涵盖了接口生命周期的各个阶段,从定义接口契约开始,调试可以一键mock,不需要再另外搭建mockserver,接口自测冒烟及验收,开发只需自测完成后添加一个执行集,测试就可以一键完成冒烟验收平台可以定时持续集成并包含多维度通知机制,同时包含了当接口契约发生变更时,其他所有环节会同步发生变更,以达到一键变更的目的。
测试左移实践
测试环的快速验证
利用GoAPI建立在测试环节围绕接口的快速验证,将GoAPI建设的接口自动化能力接入到持续集成、发布过程、线上回归阶段。
结合发布平台实施PE发布验证
某个业务线上应用集群上百台机器,而线上回归执行运行一次不能完整覆盖到每台机器上应用实例的可用性,可能会造成某台应用实例因为不可知因素带着问题上线,导致线上故障。那么对于PE而言,他们的诉求是希望每次发布的每一台应用实例都是经过自动化回归过的,基于此,结合内部发布平台实施方案如下,一般的发布平台都应该具备以下步骤:offline、deploy、check、online;先将当前实例下线,接着部署,然后check服务可用性,最后online到线上提供服务。只是当前check这一步只是健康检查,而非服务功能性验证。那么如此可以基于check扩展去调用GoAPI openAPI实施自动化执行,通过后再自动online。
通过这个方案实施后,PE每次发布再也不会“提心吊胆”,因为每一个应用实例都是经过全量接口回归后上线的。
测试右移:接口监控
从接口全生命周期来看,还有“最后一公里”需要去攻克,那就是线上接口监控。首先我们从整体的业务质量监控来看,需要依赖于业务质量监控和系统资源监控两者形成互补。
系统资源监控主要是贴近系统资源,从服务器、数据库、中间件、应用异常、网络等资源展开监控,但是其中的局限在于难以直观评估线上用户实际影响。
业务质量监控主要是贴近业务功能场景,从接口监控、UI监控、指标监控、舆情监控等方面展开,可用于评估线上业务影响。
接下来聚焦于接口监控,通过监控是否能够及时发现接口不可用,减少对用户的使用及体验是非常重要的。围绕接口监控形成的闭环解决方案,需要包含从监控、告警、处理、归档、统计的几个环节。结合GoAPI的业务接口监控优秀实践来看
从建立业务执行集开始,根据业务接口的重要程度进行执行计划的制定,在执行失败时,通过不同的重试机制来升级对应的报警策略,以达到责任人能够快速跟进处理的目的。在跟踪分析过程中,可以结合业务的trace链路,通过在请求中带相应的Header贯穿整个链路,实现对于失败case的快速定位,处理完成后进行相应的记录和结论同步,最后在统计层面落地了几项指标:线上监控发现问题数、线上问题召回率、接口报警准确率,来有效的度量和推进接口监控的落地。
网易易测团队基于网易10年质量效能经验积累,为企业提供测试管理、UI自动化测试、接口自动化测试、性能压测等整体解决方案,助力企业建立健全质量效能体系,欢迎试用体验