MOCK服务搭设构想
回往过去发现工作总结很少。基本是工作中遇到需要解决得问题才会写写,我是个懒人不会像别人做成专题分个一 ,二,三,四来,我是个直爽的人会直奔主题,专题做的很丰富很美还是挺佩服别的博主。
一直以来,工作中还是缺少一个环节的工作经历,如何能高概率覆盖到业务功能涉及第三方依赖测试验证结果,如果经营的业务核心都是依赖上游打通,那么实际生产中会产生奇怪的现象bug;
那么开发者需要不停的打log查问题,然后再找上游者寻求帮助,协助定位现象bug的原因。
那么从这个场景中我们知道了,功能开发需要与外部对接依赖第三方时候,功能实现和测试结果考虑的场景和测试覆盖不足,原因有2点:
第一点:往往上游者都是和我们需要依赖对接功能在实现编码中是事实同步的,他们的需求实现也不知道考虑范围,对接上送数据针对真实业务场景是什么处理和结果不是很确切;
第二点:上游者和开发者都是以实现业务功能为主,但是却忽略这种双方考虑不全的场景数据,导致上送后业务处理失败,用户使用反馈报错或异常。
作为调用者摊上这点麻烦事,必须解决这个问题,在调用端开发实现时尽量保存上游返回,调用端尽可能的异常测试,反向测试,确保调用端能有应对处理措施,在编码对接中主动与上游被调用端
开发者进行详细沟通,并且要最终落实落地到应对方案。
作为测试者需要考虑调用端实现功能本来有效性和异常处理,观察依赖上送数据后返回的结果有效性和异常处理,那么这里就产生一个问题我怎么去检验和观察?
那么,mock就是测试者需要去实现和验证的解决问题办法。
mock可以解决什么问题?
第一:基于内部功能业务开发,一个项目中划分不同的业务模块,不同业务模块调用需要不同开发者去实现编码,那么当编码开发不同步时被调用方需要自主编写mock功能,从而验证自己编码实现的功能调试正常以及异常处理;
第二:界面化功能前后端分离调用调试,后端开发者需要和前端开发者明确功能接口定义和规范,先出接口文档后端开发者需按照文档规范编码实现业务功能逻辑,mock构建一个载体方便前端开发者调用,从而来完成前端功能编码实现;
第三:基于依赖外部功能业务开发,对外调用者开发在编码实现并行同样如此mock自己需要的依赖对象;
第四:测试者在等待接口测试通知后,可能会存在不是所有接口都是在提测通知环节完成,那么有可能存在接口依赖关系,这时候需要mcok构建一个介质提供给需要调用的接口完成测试;
第五:自动化测试和性能链路压测,我们都知道,自动化接口持续构建与集成是方便项目业务能稳定的定时定点巡检,优先于生产用户提早发现问题,及时发现及时解决。测试场景数据很难覆盖生产环境的场景,当业务复杂测试准备的条件资源不足时,测试覆盖能力条件越显得匮乏,所以不得不采用mock尽可能弥补这种不足,将mock模块纳入自动化是一种可以采取的选择。性能链路压测,很显然我们通常是基于业务链路去做压测,依赖外部调用都是直接mock掉,从而检查内部业务功能接口的性能和技术系统架构设计。
那么终极问题来了,有什么好的方案可以解决以上五种情况,实现聚集一体的载体?
我的想法是排除编码层以外,搭建mock服务平台,支撑整个业务需要的环节,并且根据需要时候同步维护mock服务。
如上图所示:
在搭设MOCK服务后,调用方A和调用方D直接通过访问MOCK给到相应的结果,从而来完成调用方的功能。
接下来这个东西怎么去搭设的问题,通常情况下是由开发者组织相关人员去执行完成,这里是希望测试者,运维者共同参入,能够更完备和精确的保证服务搭设并运行。
首先,需要确定mock平台开发以什么方案实现,是自主根据业务开发平台还是基于市面上的接口平台进行二次改造;这就决定参与开发者的能力水平和业务理解能力。所以,对于资源考虑建议使用
市面上已经存在的接口管理平台进行二次开发。
mock部分搭设请求设计实现目标:
1:调用方向MOCK服务请求,mock服务前置判断被请求的资源是否Open,如果为true怎么传递到处理服务,并且相应返回结果给到被调用方,否则直接拒绝。
2:调用方被拒绝后,则向真实的被调用方发起请求资源,为什么这么设计是因为通过控制开关去把控,整个业务链路中走的都是真实场景产生的数据。
MCOK平台急需的功能:
1.支持自定义修改服务的接口地址;
2.支持签名与验签,加密与解密功能,用户白名单;
3.参数化,对象存储与转换,格式转化,对象引用;
4.请求参数可作为出参对象实例化 等同于 入参id=G473847387474387 返回参数 参数 id = G473847387474387;
5.支持新增,编辑,删除接口参数;
‘......等等功能
粗略如图下所示:
为啥需要这些功能,原因很简单。mock数据也是要符合真实环节被调用方返回数据格式,模板一致,否则内部业务调用方无法处理mock返回数据,难道让模块业务开发者修改代码逻辑?小改可以大动是不行的。
现在是MOCK服务确定后,什么情况去请求?怎么个链路去请求?
那么得熟悉一下业务使用得系统架构咯
以前是接触得是分布式与集群,到现在得是微服务架构设计
什么是分布式?
一句话来讲就是将对于业务进行模块化,不同的业务请求走不同的业务资源服务
简略图如下:
什么是集群?
一句来讲就是将业务服务进行复制多个,一模一样的服务的存在多个,来支撑业务流量造成的压力。
简略图如下:
什么是微服务?
简单来说,就是将分布式与集群结合在一起应用,配合一些中间件能支撑庞大的业务系统,见过的有Doubble 和SpringClould微服务,只能去百度了解
那么问题来了,不同服务架构设计,怎么能让我的mock服务关联上去,能被调用呢?
我的想法是:1:通过IP进行筛选出请求用户,2:接着业务处理前置判断用户是不是属于测试用户,3:再就是隔离测试用户数据等打标签,4:mock前置判断用户是否在白名单内,打上标记然后再向mock资源服务发起请求。
粗略图如下
那么还有一个问题,由于mock构造的结果只是针对业务链路或者说最后一个接口请求mock产生效果,如何让这个结果去关联事物产生连锁反应如:数据库的事务?
比如说下单调取mock完成支付,该笔订单交易成功,那么关联信息是否发生改变,是否要发生改变,则需要看在支付完成后需要的链路操作。如果需要改变,那么
需要怎么做去触发整个订单关联信息改变,那么此时需要同相关开发人员沟通设计。
以上是个人所想,未完待续-------------
欢迎阅读者点评,提供一下思路和建议