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

    文章

    111

    浏览量

    11516
  • HTTP协议
    +关注

    关注

    0

    文章

    61

    浏览量

    9708

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

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

收藏 人收藏

    评论

    相关推荐

    激光焊缝跟踪器与传统焊缝检测方法的对比

    在焊接自动化的推动下,焊缝检测技术逐渐成为焊接质量控制的重要环节。传统的焊缝检测方法在一定程度上满足了生产需求,但随着工业应用对精度和效率要求的提升,激光焊缝跟踪器逐渐成为一种更具竞争力的解决方案。今天一起了解激光焊缝跟踪器与传统焊缝检测方法的
    的头像 发表于 11-28 16:47 88次阅读
    激光焊缝跟踪器与<b class='flag-5'>传统</b>焊缝检测方法的<b class='flag-5'>对比</b>

    便携式光合作用测定仪与传统仪器对比

    便携式光合作用测定仪与传统仪器在多个方面存在显著差异。以下是对两者的对比分析: 一、便携性 便携式光合作用测定仪 : 体积小巧,重量轻,易于携带,方便科研人员在实验室、田间或其他需要测定光合作用
    的头像 发表于 11-23 09:47 138次阅读

    迅为RK3568开发板传统分区和定制扩展分区镜像对比

    根据上面两个小节的内容,可以将 rk 传统分区和定制扩展分区的特性进行一下对比,整理好的表格如下所示: rk 传统分区 镜像特性概述: (1)固定设备树绑定:每个镜像只能适配特定的硬件配置,无法
    发表于 11-19 10:50

    SSR与传统服务器的对比分析

    的服务模式,与传统服务器相比,有着独特的优势和挑战。 1. 定义与架构 传统服务器 :传统服务器是指物理或虚拟的计算资源,用户需要自行管理操作系统、应用程序以及运行环境。用户需要负责服务器的维护、升级和扩展。 SSR :SSR是
    的头像 发表于 11-18 11:22 232次阅读

    光伏电站运维管理系统与传统运维模式对比分析

           光伏电站运维管理系统与传统运维模式对比分析        随着全球对可再生能源的关注度不断提升,光伏电站作为绿色能源的重要组成部分,其运维管理显得尤为重要。传统的运维模式已逐渐无法满足
    的头像 发表于 11-08 16:14 207次阅读
    光伏电站运维管理系统与<b class='flag-5'>传统</b>运维模式<b class='flag-5'>对比</b>分析

    无人机智能巡检系统与传统巡检方式的对比

    无人机智能巡检系统与传统巡检方式的对比 在当今科技飞速发展的时代,无人机智能巡检系统已经逐渐成为现代工业领域的一大创新。相较于传统巡检方式,无人机智能巡检系统展现出了一系列显著的优势和特点。 1
    的头像 发表于 09-26 17:34 397次阅读
    无人机智能巡检系统与<b class='flag-5'>传统</b>巡检方式的<b class='flag-5'>对比</b>

    对比分析点焊机与传统焊接方法

    在焊接技术的演进历程中,点焊机凭借其高效、精确与自动化的特性,在现代工业制造中迅速崛起,成为现代工业制造中的重要工具。相较于历史悠久的传统焊接方式,点焊机展现了诸多独特优势。以下我们将从点焊机的工作原理、优缺点及应用领域三大维度,对两者进行细致入微的对比分析。
    的头像 发表于 09-12 11:52 368次阅读

    传统园区与智慧园区的对比及优势

    在当今数字化快速发展的时代,传统园区管理方式已经逐渐显露出一些不足之处,而智慧园区管理系统的建设则为管理者提供了全新的解决方案。古河云科技通过对传统园区和 智慧园区 管理系统进行对比分析,可以清晰
    的头像 发表于 08-09 14:43 311次阅读

    深度学习与传统机器学习的对比

    在人工智能的浪潮中,机器学习和深度学习无疑是两大核心驱动力。它们各自以其独特的方式推动着技术的进步,为众多领域带来了革命性的变化。然而,尽管它们都属于机器学习的范畴,但深度学习和传统机器学习在方法、应用、优势等方面却存在显著的差异。本文将对这两者进行深入的对比和分析。
    的头像 发表于 07-01 11:40 1210次阅读

    固态继电器与传统继电器的对比

    在电力系统和工业自动化中,继电器作为一种重要的电气控制元件,承担着电路通断、转换和保护等重要任务。随着科技的进步,固态继电器作为一种新型的无触点开关器件,逐渐在各个领域得到广泛应用。本文将对固态继电器与传统继电器在结构、工作方式、工作环境适应性等方面进行对比研究,以期为读
    的头像 发表于 06-26 17:26 870次阅读

    全光网络与传统网络架构的对比分析

    随着信息技术的飞速发展,网络已经成为我们日常生活中不可或缺的一部分。在这个信息爆炸的时代,全光网络和传统网络架构作为两种主流的网络技术,各有其特点和适用范围。本文将对这两种网络架构进行详细的对比
    的头像 发表于 06-07 10:45 1123次阅读
    全光网络与<b class='flag-5'>传统</b>网络架构的<b class='flag-5'>对比</b>分析

    UVLED面光源与传统光源对比:谁更胜一筹?

    之间的对比结果又如何呢?本文将对UVLED面光源与传统光源进行全面对比,以揭示谁更胜一筹。 一、能耗对比 在能耗方面,UVLED面光源相较于传统
    的头像 发表于 05-10 15:28 592次阅读
    UVLED面光源与<b class='flag-5'>传统</b>光源<b class='flag-5'>对比</b>:谁更胜一筹?

    UVLED固化箱与传统固化设备对比:优势一目了然

    ,UVLED固化箱相比传统固化设备究竟有哪些优势呢?本文将为您进行详细对比,让您一目了然。 一、节能环保 UVLED固化箱相比传统固化设备在节能环保方面具有显著优势。首先,UVLED固化箱采用LED发光技术,具有更高的能量转换效
    的头像 发表于 05-09 10:47 595次阅读
    UVLED固化箱与<b class='flag-5'>传统</b>固化设备<b class='flag-5'>对比</b>:优势一目了然

    三种Mock测试方案的应用与实践总结

    在面向对象程序设计中,模拟对象(英语:mock object,也译作模仿对象)是以可控的方式模拟真实对象行为的假的对象。程序员通常创造模拟对象来测试其他对象的行为,很类似汽车设计者使用碰撞测试假人来模拟车辆碰撞中人的动态行为。
    的头像 发表于 04-28 17:50 1436次阅读
    三种<b class='flag-5'>Mock</b>测试方案的应用与实践总结

    电子式流量开关与传统靶式流量开关对比有哪些优势?

    电子式流量开关与传统靶式流量开关对比有哪些优势? 电子式流量开关与传统靶式流量开关是两种常见的流量控制设备,它们在原理、适用范围、优势等方面存在一些差异。本文将就这些差异进行详细探讨,以帮助读者更好
    的头像 发表于 12-15 09:43 671次阅读