0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

哈啰HiMock和传统Mock的对比

vliwulianw 来源:哈啰技术 作者:崔焕锐 2022-10-09 10:44 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

哈啰业务数据场景痛点

软硬件一体化应用场景

f0cccf42-4169-11ed-96c9-dac502259ad0.png  

用户从APP端、支付宝小程序、微信小程序、H5和WEB,经过一些核心服务。核心服务通过HTTP或内部的RPC接口,包含用户增长、配置平台、综合平台、用户增长等,对应的基础平台包括存储平台、用户平台、算法平台、开放平台、大数据、地图平台等。物联网目前主要对接单车、电动车、电池、电柜等。

研发测试阶段遇到的痛点

f124afaa-4169-11ed-96c9-dac502259ad0.png  

单车这里,红包车数据测试链路过长,手工构造一次数据需要0.5天以上;不同入参返回不同结果,难以构造模拟返回数据。助力车这里,超区断电依赖地图算法模型,测试线下路上跑来跑去模拟临区超区耗时过长。

顺风车这里,对接众多第三方平台,迭代回归第三方接口,各种场景返回难以构造。支付这里,异常场景众多,实名认证信息难以构造。

换电这里,不同项目并行开发,对方接口未开发的情况下,开发调试成本过高;无法模拟只支持某个时间段的返回结果。电动车这里,通过单测的方式Mock各种场景代码量巨大;部分场景Mock需要研发配合改造代码,侵入性过高,成本较大。

哈啰HiMock和传统Mock的对比

传统Mock在哈啰全场景先天性不足

f18c5a38-4169-11ed-96c9-dac502259ad0.png  

传统Mock,一是代码改动频繁,只要代码变动,case相关代码都需要改动,整体耗时较长;二是链路简单,只支持简单链路的Mock;三是Mock难度上,数据构造难,非本业务线同学如果没有接口文档,不知道如何快速Mock;四是扩展难度较大,仅支持部分软件协议,不能扩展。

而哈啰全场景业务特性一是代码改动难,涉及到多个业务方,研发无法及时配合验证迭代需求改动相关代码;二是链路复杂,需要支持前后多端、涉及硬件协议链路的Mock;三是Mock难度上,并行开发时,多个业务同个接口模拟不同的返回,构造成本较大;四是拓展程度上,需要支持软硬件协议数据模拟。

打破传统Mock的设计思路

f1b693b6-4169-11ed-96c9-dac502259ad0.png  

我们为了打破传统Mock的设计思路,从以下六点设计HiMock。一是低代码,代码开发量少,可以快速搭建框架;二是代码解耦,不需要用户改动任何代码;三是高性能,不影响原有系统的性能指标;四是应用性,用户可以低成本Mock;五是支持前后置场景,如签名、回调、数据库操作等;六是全场景,支持前后端各种协议。

Mock技术支撑全场景业务域的实践

打破传统互联网的软硬件结合的Mock业务架构

f1e6b15e-4169-11ed-96c9-dac502259ad0.png  

首先介绍服务链路,C端用户主要来源于哈啰APP、支付宝小程序、微信小程序,通过HTTP网关,再进入各个业务的入口,包括单车、助力车、电动车、换电、顺风车等,接下来我们协议拦截之后,再去匹配对应规则引擎里配置的规则来看是不是命中了对应的Mock,并去检查对应的静默开关、生效时间、生效范围、延时、参数替换、后置条件,这些都是通过规则引擎拿到对应的数据。我们通过Mock返回的规则,一站式并支持多端。

接下来介绍产品能力,一是Mock管理,包括case创建、case列表、我的Mock;二是工具管理,主要是YAPI|Swagger接口导入;三是大盘统计,主要是调用统计的分析,包含每个业务域、调用量以及对应的Mock量、各业务线使用的分析等;四是权限管理,包括用户权限和用户组权限;五是拦截规则引擎,包括高并发支持、静默支持、生效范围和参数替换;六是一体化Mock工作台,可以集成APP、H5、微信小程序和支付宝小程序,自动接口抓包、一键功能,并支持YAPI|Swagger接口导入、接口参数自动获取、匹配规则参数自动生成;七是自动更新,底层代码改动,自动更新最新代码;八是环境稳定性,保证整体研发测试流程不被打断,Mock可被追溯。

HiMock整体流程

f22f1f52-4169-11ed-96c9-dac502259ad0.png  

我们case的来源分为三部分,包括HiMock、Fox和第三方。左边这部分就是用户请求,分为后端请求和前端请求。后端请求我们通过Agent拦截到对应的协议之后,根据Mock、规则引擎去匹配对应的规则,如果能匹配到,就把对应的Mock结果返回出去。

Agent的下载流程也有两部分,一是Atlas部署的时候,会去检查Agent是否存在,如果不存在,会自动下载到对应服务的原容器上或者ECS上面。二是添加或更新case的时候,也会去判断Agent是否存在。前端请求iOS是针对NSURLProtocol协议进行拦截和转发到对应的Mock规则引擎,去判断是否命中;安卓是针对OkHttp协议拦截和转发,其他协议也可以在这里进行兼容适配处理。

HiMock底层Agent设计

f2c6c104-4169-11ed-96c9-dac502259ad0.png  

HiMock底层Agent设计主要分四方面,一是字节码拦截,我们经过大量的对比分析,最终选型ByteBuddy作为字节码拦截的底层框架,可实现低代码,迭代敏捷迅速开发。二是拦截协议,我们实现插件化模式开发,可快速实现拦截协议的开发与配置,支持多维度协议拦截。三是壳化Agent,对外暴露一个premain的壳函数,可实现动态代码更新相关功能。四是后置处理,复杂链路信息,需要在Mock 返回之后,执行一些数据库操作、消息发送、地址回调等。

f319f108-4169-11ed-96c9-dac502259ad0.png  

在HiMock底层Agent实现上,我们首先把Agent进行一个premain函数的壳化处理,再对各个协议拦截的Interceptor封装。HTTP协议请求,我们针对CloseableHttpClient、HttpClient、OkHttpClient和RestTemplate等等Class进行拦截。RPC协议,我们有进行RpcHandler Class拦截。针对Mq,我们有Hms进行拦截。同理,其他也是拦截对应的核心请求类,再进行协议的拦截。

HiMock规则引擎设计

f3d68958-4169-11ed-96c9-dac502259ad0.png  

HiMock规则引擎设计思路主要分三方面,包括高并发、兼容性和多端。在方案调研上,基于不同协议,拦截规则不尽相同,但是作为拦截收口,统一转为JSON进行参数匹配入参条件。最常用的JsonPath框架有fastJson、jackson、json-path和snack3,经过多轮压测,我们最终选型snack3,支持的选择器表达式更丰富,性能较优。

在方案执行上,拦截规则判断时多条件支持,且支持多条件“与、或”组合等。目前支持的条件有equals、not equals、contains、not contains、in等。在方案落地上,拦截规则参数根据入参自动生成,参数预期值智能匹配。

HiMock平台系统架构

f419ae90-4169-11ed-96c9-dac502259ad0.png  

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落地使用场景

f51c4b0e-4169-11ed-96c9-dac502259ad0.png  

HiMock落地使用场景有依赖测试、自动化测试、性能压测和并行开发等。依赖测试支持 case Mock生效日期和端到端的Mock生效范围,主要是为了避免某一个case过大影响实际的测试范围。自动化测试支持自动开启、关闭对应的Mock开关。

性能压测支持一键静默,只要把静默开关打开,所有的调用Mock case都不会生效,这时所有的性能压测都会走原始的调用请求。并行开发支持生效范围界定和Mock参数动态调整等。当然我们在测试过程中不要过度依赖基于Mock的测试结果,Mock只是一种提效手段,基于Mock的测试无论如何多么的充分,都不能保证不会遗漏。一个完整的测试策略,一定是由基于Mock的测试和基于非Mock的测试共同组成,二者相辅相成,缺一不可。

HiMock平台能力介绍

f54a4df6-4169-11ed-96c9-dac502259ad0.png  

这里介绍RPC接口的新增,在Mock标题里可以根据自己的场景设置标题,如助力车赔付,应用名称、iface、method是要拦截的对应服务以及它对应的method。在右边,我们也可以看到对应这两个应用名称,后面可以查看Atlas的配置,如果选择在ClientAppId进行Mock拦截,需要把对应服务的自定义启动参数中Agent启动命令配置上去。

Mock环境里FAT和UAT都可以选择,同一个case多个环境同时生效。生效时间默认是永久生效的,如果填写生效范围,只会针对生效时间范围内走Mock逻辑;下面也有对应的是否开启的开关。添加规则这里,我们支持从用户请求日志里自动获取对应的请求有哪些参数,减少用户手动填入的复杂度。最下面的请求响应、执行日志和变更记录,主要用来查看预执行的时候对应这个规则能否匹配到,哪一步拦截失败,进而去调整Mock匹配规则。

针对复杂场景,我们支持后置模拟回调,包括HMS、HTTP等。

f5b467cc-4169-11ed-96c9-dac502259ad0.png  

这里是测试请求,测试请求自动填入,也可以根据实际情况进行动态调整,Mock结果即时校验。执行日志做到了执行过程的匹配,结果校验可以实时看到匹配规则是否正常匹配,以及匹配的返回结果是否是想要的。

f5df2a5c-4169-11ed-96c9-dac502259ad0.png  

接下来介绍前端一键Mock的功能,左边是我们的APP端,右边通过扫码APP-QrCode就可以看到左边菜单栏有自动抓包的链路信息,点击后会有接口对应的Request和Response。这里我们可以快速Mock对应接口的返回,或者是Mock异常的返回。

HiMock平台效果价值回收能力分析

f61c7420-4169-11ed-96c9-dac502259ad0.png  

我们主要从六部分进行HiMock效果价值回收能力分析,包括接口调用统计分析、Mock业务线覆盖统计分析、Mock占比分析、业务线Mock运营分析、Mock case统计分析和Mock次数、平均耗时统计分析。

f66c82d0-4169-11ed-96c9-dac502259ad0.png  

这里是HiMock平台整体的调用统计分析,可以看到具体某个业务线、当天调用量和对应的Mock次数。左边是调用统计的趋势图,右边是业务线Mock次数的占比。

后续规划&探讨

f732b1e4-4169-11ed-96c9-dac502259ad0.png  

Mock平台我们分三步走,第一步是测试小哥哥小姐姐通过手工Mock的方式人肉抓包Mock返回,后端Mock代码改动较大,费时费事费人,重复劳动严重。第二步是HiMock一体化Mock平台,可以支持全场景、多端Mock。前端自动抓包一键Mock,规则匹配参数自动生成,日志请求自动填充,极大提升了我们Mock case的整体效率。第三步是HiMock智能化,我们后续也会支持适配中间件DB、MQ类型协议的Mock,与仿真实验室、精准自动化的进一步结合,打造研发、精准测试、高效运营的一体化Mock,并打造智能出行Mock平台,能够self-learning自适应,以及更多场景的Mock支持。




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RPC
    RPC
    +关注

    关注

    0

    文章

    113

    浏览量

    12198
  • HTTP协议
    +关注

    关注

    0

    文章

    67

    浏览量

    10525

原文标题:基于出行领域全场景的mock提效探索与实践

文章出处:【微信号:软件质量报道,微信公众号:软件质量报道】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    复合机器人对比传统AGV和机械臂的优势何在?

    复合机器人对比传统AGV和机械臂的优势,核心在于它突破了单一设备的功能局限,实现了“移动+操作”的深度协同,尤其在上下料和物料转运场景中优势显著。经世智能复合机器人:重新定义上下料与物料转运的效率
    的头像 发表于 11-21 15:32 1072次阅读
    复合机器人<b class='flag-5'>对比</b><b class='flag-5'>传统</b>AGV和机械臂的优势何在?

    传统普通扫码枪与RFID扫描枪对比分析

    本文深入对比传统普通扫码枪与RFID扫描枪的核心差异,从成本结构、使用场景到技术特点进行全面分析,帮助企业选择最适合的数据采集解决方案。
    的头像 发表于 11-19 11:03 991次阅读
    <b class='flag-5'>传统</b>普通扫码枪与RFID扫描枪<b class='flag-5'>对比</b>分析

    传统与激光的对比:为什么激光焊接是高端制造的必然选择?

    一、传统焊接的定义与特点在我们介绍自家的自动焊接设备时,往往会说与传统焊接技术做对比,那么怎么样的焊接技术算传统呢?传统焊接技术是以人工操作
    的头像 发表于 10-29 09:24 199次阅读
    <b class='flag-5'>传统</b>与激光的<b class='flag-5'>对比</b>:为什么激光焊接是高端制造的必然选择?

    串联谐振试验装置的核心工作逻辑是什么?和传统耐压设备比优势在哪?

    ,通常 50-100 倍)。​ 对比传统工频耐压设备,优势堪称 “降维打击”:传统设备需大电源容量(如测 3km 10kV 电缆需 500kVA 以上),体积堪比冰箱且重量超 200kg;而武汉特高压串联
    发表于 10-11 15:40

    禾赛科技与哈啰达成战略合作

    本周,在 2025 Inclusion·外滩大会上,哈啰正式发布首款前装量产 Robotaxi 车型 “HR1”(Hello Robot1)。哈啰 HR1 单车搭载 8 颗激光雷达,全套均来自禾赛
    的头像 发表于 09-16 16:15 681次阅读

    东风日产启辰与哈啰达成战略合作

    9月11日,东风日产启辰品牌成立15周年之际,与国内领先的互联网和移动出行平台哈啰在上海外滩大会上正式达成战略合作,并签订万台启辰VX6订单,共同推动L4级别自动驾驶技术的研发、应用与规模化商用。
    的头像 发表于 09-12 17:35 1137次阅读

    地平线与哈啰正式签署战略合作协议

    9月11日,在2025Inclusion·外滩大会上,地平线与哈啰正式签署战略合作协议。双方将基于Robotaxi运营场景和需求,发挥各自技术优势,共同打造极致低成本、高安全、高可靠、高可用的智能
    的头像 发表于 09-12 14:25 730次阅读

    半导体传统封装与先进封装的对比与发展

    半导体传统封装与先进封装的分类及特点
    的头像 发表于 07-30 11:50 832次阅读
    半导体<b class='flag-5'>传统</b>封装与先进封装的<b class='flag-5'>对比</b>与发展

    RFID方案与传统条码方案对比:哪种更适合你的工厂出入库管理?

    展开对比,为企业选择最优方案提供参考。一、技术原理与核心差异传统条码方案依赖光学扫描技术,通过激光或摄像头识别条形码或二维码,需人工逐个对准扫描。而RFID方案采
    的头像 发表于 06-05 14:55 665次阅读
    RFID方案与<b class='flag-5'>传统</b>条码方案<b class='flag-5'>对比</b>:哪种更适合你的工厂出入库管理?

    弧光保护装置与传统过流保护的差异

    弧光保护装置与传统过流保护的差异: 对比项弧光保护装置传统过流保护 检测对象电弧光+电流突变仅电流幅值 动作时间5-15ms 1100ms-2s 适用场景开关柜内部短路线路过载/远端短路 抗干扰能力多判据融合,误动率低易受电机启
    发表于 05-07 09:59

    新型高精度融合定位电子工牌与传统电子工牌对比

    新型高精度融合定位电子工牌与传统电子工牌对比,我们从以下几个方面介绍下对比性。1、定位功能传统电子工牌只支持普通的GPS+北斗定位功能;新型电子工牌可以采用高精度RTK+UWB+蓝牙定
    的头像 发表于 03-13 16:42 967次阅读
    新型高精度融合定位电子工牌与<b class='flag-5'>传统</b>电子工牌<b class='flag-5'>对比</b>

    激光位移传感器与传统位移传感器的对比

    激光位移传感器与传统位移传感器在多个方面存在显著的差异。以下是对两者的对比: 一、测量原理 激光位移传感器 :主要基于激光光学和光电探测技术。它利用激光束发射到目标物体上并接收反射光信号,通过分析光
    的头像 发表于 02-13 18:09 1231次阅读

    FDD与传统通信技术的对比

    FDD(Frequency Division Duplex,频分双工)是一种双工通信技术,它与传统通信技术的对比主要体现在双工方式、频谱利用、系统复杂度、应用场景及性能特点等方面。以下是对这些方面
    的头像 发表于 01-07 16:43 1244次阅读

    光纤连接器与传统连接器对比

    在现代通信技术中,数据传输的速度和可靠性至关重要。随着技术的发展,光纤连接器因其高速、长距离传输和抗干扰能力而越来越受到重视。与此同时,传统连接器,尤其是铜缆连接器,仍然在许多应用中占据一席之地
    的头像 发表于 12-29 14:37 1414次阅读

    液晶投影仪与传统投影仪的比较

    投影仪 :多依赖于灯泡发光,通过透镜组将光线投射出去,成像质量相对较为粗糙。 二、亮度与对比度 液晶投影仪 :通常具备更高的亮度与更出色的对比度,使得画面更加鲜明、细节更为丰富。 传统投影仪 :虽然灯泡光源能提供较高的
    的头像 发表于 12-26 18:10 1601次阅读