哈啰业务数据场景
痛点软硬件一体化利用场景
用户从APP端、支付宝小程序、微信小程序、H5和WEB,通过一些外围服务。外围服务通过HTTP或外部的RPC接口,蕴含用户增长、配置平台、综合平台、用户增长等,对应的根底平台包含存储平台、用户平台、算法平台、开放平台、大数据、地图平台等。物联网目前次要对接单车、电动车、电池、电柜等。
研发测试阶段遇到的痛点
单车这里,红包车数据测试链路过长,手工结构一次数据须要0.5天以上;不同入参返回不同后果,难以结构模仿返回数据。助力车这里,超区断电依赖地图算法模型,测试线下路上跑来跑去模仿临区超区耗时过长。逆风车这里,对接泛滥第三方平台,迭代回归第三方接口,各种场景返回难以结构。领取这里,异样场景泛滥,实名认证信息难以结构。换电这里,不同我的项目并行开发,对方接口未开发的状况下,开发调试老本过高;无奈模仿只反对某个时间段的返回后果。电动车这里,通过单测的形式Mock各种场景代码量微小;局部场景Mock须要研发配合革新代码,侵入性过高,老本较大。
哈啰HiMock和传统Mock的比照
传统Mock在哈啰全场景先天性有余
传统Mock一是代码改变频繁,只有代码变动,case相干代码都须要改变,整体耗时较长;二是链路简略,只反对简略链路的Mock;三是Mock难度上,数据结构难,非本业务线同学如果没有接口文档,不晓得如何疾速Mock;四是扩大难度较大,仅反对局部软件协定,不能扩大。而哈啰全场景业务个性一是代码改变难,波及到多个业务方,研发无奈及时配合验证迭代需要改变相干代码;二是链路简单,须要反对前后多端、波及硬件协定链路的Mock;三是Mock难度上,并行开发时,多个业务同个接口模仿不同的返回,结构老本较大;四是拓展水平上,须要反对软硬件协定数据模仿。
突破传统Mock的设计思路
咱们为了突破传统Mock的设计思路,从以下六点设计HiMock。一是低代码,代码开发量少,能够疾速搭建框架;二是代码解耦,不须要用户改变任何代码;三是高性能,不影响原有零碎的性能指标;四是应用性,用户能够低成本Mock;五是反对前后置场景,如签名、回调、数据库操作等;六是全场景,反对前后端各种协定。
Mock技术撑持全场景业务域的实际
突破传统互联网的软硬件联合的Mock业务架构
首先介绍服务链路,C端用户次要来源于哈啰APP、支付宝小程序、微信小程序,通过HTTP网关,再进入各个业务的入口,包含单车、助力车、电动车、换电、逆风车等,接下来咱们协定拦挡之后,再去匹配对应规定引擎里配置的规定来看是不是命中了对应的Mock,并去查看对应的静默开关、失效工夫、失效范畴、延时、参数替换、后置条件,这些都是通过规定引擎拿到对应的数据。咱们通过Mock返回的规定,一站式并反对多端。
接下来介绍产品能力,一是Mock治理,包含case创立、case列表、我的Mock;二是工具治理,次要是YAPI|Swagger接口导入;三是大盘统计,次要是调用统计的剖析,蕴含每个业务域、调用量以及对应的Mock量、各业务线应用的剖析等;四是权限治理,包含用户权限和用户组权限;五是拦挡规定引擎,包含高并发反对、静默反对、失效范畴和参数替换;六是一体化Mock工作台,能够集成APP、H5、微信小程序和支付宝小程序,主动接口抓包、一键性能,并反对YAPI|Swagger接口导入、接口参数主动获取、匹配规定参数主动生成;七是自动更新,底层代码改变,自动更新最新代码;八是环境稳定性,保障整体研发测试流程不被打断,Mock可被追溯。
HiMock整体流程
咱们case的起源分为三局部,包含HiMock、Fox和第三方。右边这部分就是用户申请,分为后端申请和前端申请。后端申请咱们通过Agent拦挡到对应的协定之后,依据Mock、规定引擎去匹配对应的规定,如果能匹配到,就把对应的Mock后果返回进来。Agent的下载流程也有两局部,一是Atlas部署的时候,会去查看Agent是否存在,如果不存在,会主动下载到对应服务的原容器上或者ECS下面。二是增加或更新case的时候,也会去判断Agent是否存在。前端申请iOS是针对NSURLProtocol协定进行拦挡和转发到对应的Mock规定引擎,去判断是否命中;安卓是针对OkHttp协定拦挡和转发,其余协定也能够在这里进行兼容适配解决。
HiMock底层Agent设计
HiMock底层Agent设计次要分四方面,一是字节码拦挡,咱们通过大量的比照剖析,最终选型ByteBuddy作为字节码拦挡的底层框架,可实现低代码,迭代麻利迅速开发。二是拦挡协定,咱们实现插件化模式开发,可疾速实现拦挡协定的开发与配置,反对多维度协定拦挡。三是壳化Agent,对外暴漏一个premain的壳函数,可实现动静代码更新相干性能。四是后置解决,简单链路信息,须要在Mock 返回之后,执行一些数据库操作、音讯发送、地址回调等。
在HiMock底层Agent实现上,咱们首先把Agent进行一个premain函数的壳化解决,再对各个协定拦挡的Interceptor封装。HTTP协定申请,咱们针对CloseableHttpClient、HttpClient、OkHttpClient和RestTemplate等等Class进行拦挡。RPC协定,咱们有进行RpcHandler Class拦挡。针对Mq,咱们有Hms进行拦挡。同理,其余也是拦挡对应的外围申请类,再进行协定的拦挡。
HiMock规定引擎设计
HiMock规定引擎设计思路次要分三方面,包含高并发、兼容性和多端。在计划调研上,基于不同协定,拦挡规定不尽相同,然而作为拦挡收口,对立转为JSON进行参数匹配入参条件。最罕用的JsonPath框架有fastJson、jackson、json-path和snack3,通过多轮压测,咱们最终选型snack3,反对的选择器表达式更丰盛,性能较优。在计划执行上,拦挡规定判断时多条件反对,且反对多条件与或组合等。目前反对的条件有equals、not equals、contains、not contains、in等。在计划落地上,拦挡规定参数依据入参主动生成,参数预期值智能匹配。
HiMock平台零碎架构
HiMock平台蕴含WEB、外围性能、数据层、Agent和Mock服务。WEB次要有DashBoard、Mock治理、权限治理、工具治理和平台指南。外围性能次要有云容器主动部署、自动化部署、增加Mock、Mock列表、Mock日志、Mock规定、工具治理、权限治理、数据统计和用户手册。同时咱们要适配一些拦挡协定,如RPC、HTTP、TCP、MQ、MQTT、DB、ES。
数据层次要分为Mysql、Redis和ES,咱们会把数据缓存到Redis里,再定期汇总到Mysql里,并把Redis里的数据进行清空,加重缓存压力。Mock的服务申请被对应的Agent拦挡到协定申请之后,Agent拜访Mock服务设置的规定数据,拿到规定数据判断申请是否被匹配到Mock规定。
HiMock落地应用场景
HiMock落地应用场景有依赖测试、自动化测试、性能压测和并行开发等。依赖测试反对 case Mock失效日期和端到端的Mock失效范畴,次要是为了防止某一个case过大影响理论的测试范畴。自动化测试反对主动开启、敞开对应的Mock开关。性能压测反对一键静默,只有把静默开关关上,所有的调用Mock case都不会失效,这时所有的性能压测都会走原始的调用申请。并行开发反对失效范畴界定和Mock参数动静调整等。当然咱们在测试过程中不要适度依赖基于Mock的测试后果,Mock只是一种提效伎俩,基于Mock的测试无论如何如许的充沛,都不能保障不会脱漏。一个残缺的测试策略,肯定是由基于Mock的测试和基于非Mock的测试独特组成,二者相辅相成,缺一不可。
HiMock平台能力介绍
这里介绍RPC接口的新增,在Mock题目里能够依据本人的场景设置题目,如助力车赔付,利用名称、iface、method是要拦挡的对应服务以及它对应的method。在左边,咱们也能够看到对应这两个利用名称,前面能够查看Atlas的配置,如果抉择在ClientAppId进行Mock拦挡,须要把对应服务的自定义启动参数中Agent启动命令配置下来。Mock环境里FAT和UAT都能够抉择,同一个case多个环境同时失效。失效工夫默认是永恒失效的,如果填写失效范畴,只会针对失效工夫范畴内走Mock逻辑;上面也有对应的是否开启的开关。增加规定这里,咱们反对从用户申请日志里主动获取对应的申请有哪些参数,缩小用户手动填入的复杂度。最上面的申请响应、执行日志和变更记录,次要用来查看预执行的时候对应这个规定是否匹配到,哪一步拦挡失败,进而去调整Mock匹配规定。针对简单场景,咱们反对后置模仿回调,包含HMS、HTTP等。
这里是测试申请,测试申请主动填入,也能够依据理论状况进行动静调整,Mock后果即时校验。执行日志做到了执行过程的匹配,后果校验能够实时看到匹配规定是否失常匹配,以及匹配的返回后果是否是想要的。
接下来介绍前端一键Mock的性能,右边是咱们的APP端,左边通过扫码APP-QrCode就能够看到右边菜单栏有主动抓包的链路信息,点击后会有接口对应的Request和Response。这里咱们能够疾速Mock对应接口的返回,或者是Mock异样的返回。
HiMock平台成果价值回收能力剖析
咱们次要从六局部进行HiMock成果价值回收能力剖析,包含接口调用统计分析、Mock业务线笼罩统计分析、Mock占比剖析、业务线Mock经营剖析、Mock case统计分析和Mock次数、均匀耗时统计分析。
这里是HiMock平台整体的调用统计分析,能够看到具体某个业务线、当天调用量和对应的Mock次数。右边是调用统计的趋势图,左边是业务线Mock次数的占比。
后续布局&探讨
Mock平台咱们分三步走,第一步是测试小哥哥小姐姐通过手工Mock的形式人肉抓包Mock返回,后端Mock代码改变较大,费时费事费人,重复劳动重大。第二步是HiMock一体化Mock平台,能够反对全场景、多端Mock。前端主动抓包一键Mock,规定匹配参数主动生成,日志申请主动填充,极大晋升了咱们Mock case的整体效率。第三步是HiMock智能化,咱们后续也会反对适配中间件DB、MQ类型协定的Mock,与仿真实验室、精准自动化的进一步联合,打造研发、精准测试、高效经营的一体化Mock,并打造智能出行Mock平台,可能self-learning自适应,以及更多场景的Mock反对。
(本文作者:崔焕锐)
本文系哈啰技术团队出品,未经许可,不得进行商业性转载或者应用。非商业目标转载或应用本文内容,敬请注明“内容转载自哈啰技术团队”。