哈啰业务数据场景
痛点软硬件一体化利用场景
用户从 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 反对。
(本文作者:崔焕锐)
本文系哈啰技术团队出品,未经许可,不得进行商业性转载或者应用。非商业目标转载或应用本文内容,敬请注明“内容转载自哈啰技术团队”。