如何发布接口_Devops下的接口全生命周期管理与测试

什么是devops?随着时间的推移,devops的定义也在不断的演进。对于其定义可能出现千人千面,但从核心观点,整体业界还是保持着一致的认识。DevOps不是单一的技术或者工具,甚至不只是一个流程,而是包含应用设计、敏捷开发、持续交付和监控运维等一系列流程,涉及到企业文化、团队协作流程等多个方面,它可以被理解为一系列可以高速、高质量进行软件开发的工具链。d665aeb8fb71463ce9ba91e78fbb337e.png结合软件生产全生命周期来看,devops落地实践的核心目标是缩短开发周期,提高部署频率和更可靠的发布。DevOps的诞生源于企业要适应这个瞬息万变的市场,能够做到持续交付。正如《持续交付2.0》作者在书中精炼的2个环:价值探索和快速验证。ee502cf71ed10a5c4fee062e4c609d5a.png快速验证环的两个核心关键是质量与速度c900f7cb649a427fde3004c07b33fec4.png它会要求以最可靠的质量和最快的速度,交付最小可行方案,可靠地收集真实反馈,来形成这样的闭环。对于质量来讲一个核心的实践就是质量内建,有一个公认的事实。那就是在整个持续交付全生命周期过程中,缺陷越滞后发现,所需要的成本就越高。质量内建就是要从生产过程中的第一个环节开始,就要注重产出物的质量,并且在每个环节中都要去开展质量保障活动,这就要求在软件全生命周期参与的各个角色都需要实时的对软件的质量负责。确保软件在交付到下一个环节前有了基础的质量保障。其核心目的就是减少因为质量问题导致的返工,避免浪费大量人力成本。速度,得益于在软件全生命周期过程中每个环节有效的开展自动化,进而做到“持续”两个字,比如持续构建、持续测试、持续发布、持续运维。对于快速验证环,从测试的层面,是如何落地实践的。让我们聚焦于接口,这个软件产物中必不可少的核心组成部分。从接口的全生命周期出发,介绍接口管理、测试、监控。接下来会围绕网易易测团队输出的接口全生命周期协作平台GoAPI出发,从痛点梳理、平台的设计、测试左移和右移实践、接口监控闭环建设等几个部分阐述是如何实现对于接口的“快速验证环”。接口全生命周期什么是接口全生命周期?可以从如下的一张图来理解9a72ce548bc7d7c8dbe7247175ce7243.png结合软件研发流程来看,接口全生命周期包含了接口定义、编写、测试、上线应用、运维监控、回收下线等阶段。在接口的不同生命周期过程中,围绕着质量内建的思想,其实是需求开发/测试/运维等角色去开展各种质量保障活动。在实践的过程中,一个典型的现象是接口的质量保障还是测试这个角色在接口测试及回归阶段进行,这种现象出现可能有两种团队形态,一是开发、测试、运维三个角色分工明确,大家都聚焦于自身角色的一些目标。二是大家都在积极的开展着质量活动,但是在实施过程中发现会遇到各种阻碍和痛点。那么在接口全生命周期中有哪些核心的痛点,可以从以下4点来进行分析

接口定义管理与同步难:传统接口定义多是文档化管理,文档更新则往往不及时,当接口发生变更时,时常不能及时同步到下游的测试团队。

自动化门槛高:数据准备、用例编写、用例执行和任务的编排都有较高的准入门槛。

角色及使用阶段受限:传统模式下的接口测试只局限于测试人员在版本回归阶段使用,缺少协作。

线上接口监控难:因代码变更导致的接口异常、偶发性的接口错误、线上服务宕机等异常行为缺乏有效的监控与发现手段。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查看mysql日志post_(转)MySQL 日志组提交

原文:https://jin-yang.github.io/post/mysql-group-commit.html组提交 (group commit) 是为了优化写日志时的刷磁盘问题,从最初只支持 InnoDB redo log 组提交,到 5.6 官方版本同时支持 redo log 和 binlog 组提交,大大提高了 MySQL 的事务处…

like语句太慢 sqlserver_SQLServer找出执行慢的SQL语句

SELECT(total_elapsed_time / execution_count)/1000 N平均时间ms,total_elapsed_time/1000 N总花费时间ms,total_worker_time/1000 N所用的CPU总时间ms,total_physical_reads N物理读取总次数,total_logical_reads/execution_count N每次逻辑读次数,total_logical_reads N逻辑…

苹果cms10自适应模板_哪里有苹果cms10自适应模板?

1,苹果CMSv10大图轮播高端大气自适应视频网站模板源码苹果cms10自适应模板下载地址:https://www.mytheme.cn/maccms/54.html第一款大图宽屏的海报轮播幻灯样式,宽屏模板支持DIY扩展自适应影视模板苹果cms10自适应模板苹果cms10自适应模板2&am…

python实现进程通信_python进程间的通讯实现

1:进程间通讯的方法:apply_async()非阻塞式通讯 apply()阻塞式通讯2:使用Queue实现对Process创建的进程间通讯,Queue本身是一个消息队列程序,Queue常用方法:Queue.qsize():返回当前消息队列的消息数量Q…

vscode php formatter mac配置_Mac上配置Vs code时,遇到的几个“坑”!

在写一些简单的程序时,你喜欢用什么编译器呢?之前我一直用的是sublime,它打开的速度快,占用的内存小。但是有个麻烦的地方,配置的时候要花一些时间,如果你的网不好还时不时给你来个timeout。最近在Youtube上…

模为2的逆元是什么_两种求模m逆元的方法

在a|b(a能整除b)的前提下&#xff0c;计算(b/a)mod m的时候转化为 计算(b*x)mod m ; 这时的x就是a的逆元(a模m的逆元)&#xff1b;此时x满足 (a*x mod m 1)&#xff1b; 这个x的求法有一下两种&#xff1a;1)扩展欧几里得算法求解 a*xm*y1; 因为 a*x mod m 1 <> a…

java值栈_Struts2 中的值栈是什么?

7.1值栈7.1.1值栈是什么简单的说&#xff1a;值栈是对应每一个请求对象的轻量级的内存数据中心。Struts2中一个很激动人心的特性就是引入了值栈&#xff0c;在这里统一管理着数据&#xff0c;供Action、Result、Interceptor等Struts2的其他部分使用&#xff0c;这样一来&#x…

java try的用法_Java中try、catch的使用方法

Java中有两种处理异常的方式&#xff0c;分别是用throws抛出异常、用try、catch捕获异常。try-catch在Javatry-catch语句的语法格式&#xff1a;try{//代码块}catch(Exception1 e){//抛出异常后所要进行的操作}当try语句当中捕获到异常时&#xff0c;会将异常抛出到catch语句中…

java not a jpeg file_javax.imageio.IIOException: Not a JPEG file: starts with 0x47 0x49

java处理图片时出现异常javax.imageio.IIOException: Not a JPEG file: starts with 0x47 0x49at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImageHeader(Native Method)at com.sun.imageio.plugins.jpeg.JPEGImageReader.readNativeHeader(Unknown Source)at com.sun…

java if用法_java中if语句的写法

if语句if 语句的语法如下&#xff1a;if(布尔表达式){//如果布尔表达式为true将执行的语句}如果布尔表达式的值为 true&#xff0c;则执行 if 语句中的代码块&#xff0c;否则执行 if 语句块后面的代码。免费视频教程推荐&#xff1a;java视频教程if...else语句if 语句后面可以…

java子类和父类实例_java中父类与子类之间的转换示例

java中父类与子类之间的转换示例有以下三点&#xff1a;示例一父类强制转子类pre class"brush:php;toolbar:false">Father f new Son();Son s (Son)f;//可以创建一个父类的实例&#xff0c;想要强制把父类对象转换成子类的&#xff0c;不行&#xff01;通俗的想…

java 原子类能做什么_死磕 java原子类之终结篇(面试题)

概览原子操作是指不会被线程调度机制打断的操作&#xff0c;这种操作一旦开始&#xff0c;就一直运行到结束&#xff0c;中间不会有任何线程上下文切换。原子操作可以是一个步骤&#xff0c;也可以是多个操作步骤&#xff0c;但是其顺序不可以被打乱&#xff0c;也不可以被切割…

java对docker_如何在docker中运行java程序

吃鸡游戏创建一个redis docker容器首先&#xff0c;我们先为redis创建一个DockerfileFROM ubuntu:12.10RUN apt-get updateRUN apt-get -y install redis-serverEXPOSE 6379ENTRYPOINT ["/usr/bin/redis-server"]现在你需要通过Dockerfile创建一个镜像&#xff0c;将…

java canvas 画图片_canvas画布——画八卦图

浏览器支持Internet Explorer 9、Firefox、Opera、Chrome 以及 Safari 支持 arc() 方法。注释&#xff1a;Internet Explorer 8 或更早的浏览器不支持 元素。定义和用法arc() 方法创建弧/曲线(用于创建圆或部分圆)。提示&#xff1a;如需通过 arc() 来创建圆&#xff0c;请把起…

java多线程编程—高级主题_Java day20 高级编程【第一章】Java多线程编程

【第一章】Java多线程编程一.进程与线程多个时间段会有多个程序依次执行&#xff0c;但是同一时间点只有一个进程执行线程是在进程基础之上划分的更小的程序单元 &#xff0c;线程是在进程基础上创建并且使用的&#xff0c;所以线程依赖于进程的支持&#xff0c;但是来讲&#…

java object数组转实体类_详解Java中String JSONObject JSONArray List实体类转换

JSON使用阿里的fastJson为依赖包gradle依赖管理如下&#xff1a;compile group: "com.alibaba", name: "fastjson", version:"1.2.41"1、String转JSONObject前言&#xff1a;String 是JSONObject格式的字符串eg:JSONObject jSONObject JSONObje…

e x泰勒 java_maven project

最近没事了玩一下maven&#xff0c;使用maven管理工程中的依赖包非常的方便。建立maven web工程的时候开始不知道怎么用tomcat来调试&#xff0c;总是使用mave的tomcat插件发布了后来调试&#xff0c;觉得非常的麻烦&#xff0c;网上找了点材料&#xff0c;看看maven web工程不…

java定义说话方法_类定义的基本形式_Java语言程

类定义的基本形式_Java语言程4&#xff0e;2&#xff0e;1 类定义的基本形式前面一节我们已经了解了类和对象的概念&#xff0c;然而在实际编程过程中&#xff0c;该如何定义一个类以及类中的对象呢&#xff1f;在Java语言中&#xff0c;用户自己可以定义一个类&#xff0c;作…

java创建线程几种_java中创建线程有几种方式

详细内容线程的创建方式1、继承Thread类实现多线程2、覆写Runnable()接口实现多线程&#xff0c;而后同样覆写run()。推荐此方式3、使用Callable和Future创建线程相关视频教程推荐&#xff1a;java学习视频实例如下&#xff1a;1、继承Thread类实现多线程/** 继承Thread类创建线…

php自定义中文分词方法,php实现的中文分词类完整实例

本文实例讲述了php实现的中文分词类。分享给大家供大家参考&#xff0c;具体如下&#xff1a;该中文分词类源码使用http://tools.ddpool.cn/code/jb51_php_format进行了格式化处理&#xff0c;便于阅读。具体代码如下&#xff1a;class Segmentation {var $options array(lowe…