首页 > 其他分享 >基于出行领域全场景的mock提效探索与实践

基于出行领域全场景的mock提效探索与实践

时间:2023-01-13 00:44:18浏览次数:30  
标签:场景 Agent 对应 mock 规则 HiMock 提效 拦截 Mock

软硬件一体化应用场景

 

用户从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支持。

标签:场景,Agent,对应,mock,规则,HiMock,提效,拦截,Mock
From: https://www.cnblogs.com/IT-Evan/p/16990307.html

相关文章

  • 场景编程集锦 - 世界那么大,我想去看看
    场景描述  “世界那么大,我想去看看”。这句话出自于一位中学老师的辞职申请,整个辞职信只有短短10个字,它被喻为史上最具情怀的辞职信。如此任性的辞职信,领导最后真批准了......
  • 性能测试|基于JMeter 完成典型电商场景(首页浏览)的性能压测
    1.1场景预设之前的测试中单独抽离出了一个注册登录的场景,而实际的电商场景中,绝大多数都是已经登录并保持登录状态的,用户的登录信息可能被保存在浏览器的​​cookie​​......
  • Tapdata Cloud 场景通关系列: Oracle → MySQL 异构实时同步
    【前言】作为中国的“Fivetran/Airbyte”,TapdataCloud自去年发布云版公测以来,吸引了近万名用户的注册使用。应社区用户上生产系统的要求,TapdataCloud3.0将正式推......
  • 场景编程集锦 - BMI指数与健身达人
    1.场景描述  BMI指数(身体质量指数,英文BodyMassIndex)是用体重公斤数除以身高米数的平方得出的数字,是目前国际上通用的衡量人体胖瘦程度以及是否健康的一个标准。“身......
  • 消息服务 + Serverless 函数计算如何助力企业降本提效?
    作者|柳下背景介绍消息队列服务(下文均以MessageService命名)作为云计算PaaS领域的基础设施之一,其高并发、削峰填谷的特性愈发受到开发者关注。MessageService对......
  • 消息服务 + Serverless 函数计算如何助力企业降本提效?
    作者|柳下背景介绍消息队列服务(下文均以MessageService命名)作为云计算PaaS领域的基础设施之一,其高并发、削峰填谷的特性愈发受到开发者关注。MessageService对上承......
  • Python+ Flask轻松实现Mock Server
    每天进步一点点,关注我们哦,每天分享测试技术文章本文章出自【码同学软件测试】码同学公众号:自动化软件测试,领取资料可加:magetest码同学抖音号:小码哥聊软件测试1、什么是......
  • 消息队列常见的使用场景
    本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招......
  • 消息队列常见的使用场景
    本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校......
  • 在云原生场景中,nettrace 如何快速进行网络故障诊断
    在开源Linux操作系统OpenCloudOS8.6中,增加了内核对网络工具nettrace的支持,允许开发者通过bpf进行网络丢包原因跟踪,内核也同时回合相关的丢包跟踪点。今天,就以nett......