月光宝盒(vivo流量录制回放平台)正式对外开源
作者:vivo 互联网服务器团队- Liu Yanjiang
月光宝盒是一个基于流量录制回放的自动化测试平台,通过录制回放取代编写脚本进行自动化回归,提升测试效率和覆盖率。因为其解决方案具有很强的通用性,所以我们把这它开源出来,希望能帮助到有需要的用户。
一、月光宝盒 是什么?
Moonbox(月光宝盒)是 JVM-Sandbox 生态下的一款流量录制回放产品。所谓流量录制回放是服务端通过挂载agent探针自动注册到服务端,拦截服务端调用,将所有外部调用依赖的内容(如数据库、分布式缓存、外部服务响应等)进行完整记录形成录制流量。其核心价值是通过录制流量数据,将流量数据转化成可复用、可执行的自动化用例,快速在测试环境中进行回放比对接口返回值和外部调用依参数(见下图)。Moonbox(月光宝盒)提供了大量的常用插件,能够对常见的中间调用进行录制回放,同时也提供了非常可靠、高性能的数据存储、计算能力。
二、月光宝盒 有哪些优势?
正如开头所说月光宝盒是一款面向测试、研发工程师使用的低门槛、高性能、更易于使用的自动化测试工具。这款产品已经在vivo运行了2年多了,经过我们持续优化、打磨拥有很多实用、易用功能。它的优点主要体现在下面几方面:
2.1 全面可视化视操作(部分功能)
(1)基于任务、接口维度的流量管理能力
(2)详细的流量展示细节(请求、响应、子调用)
(3)基于任务、接口维度的回放数据管理,叠加各种维度统计、查询能力
(4)易于人工分析的回放比对结果和差异展示
2.2 丰富的插件支持
月光宝盒支持非常多组件录制和回放能力,基本上能满足绝大多数人诉求。
2.3 多种部署方式
Docker:这种方式简单、可靠,让您可以摒弃复杂的环境配置和安装,快速在本地体验我们项目。
常规方式:这种方式复杂、步骤繁琐,需要按照步骤创建ES和MySQL数据库,初始化数据表,更新好应用配置,安装好前端node服务。
此外月光宝盒是前后端分离项目,当您使用该项目需要分别部署前端、后端,非常有助于您后续将项目部署到生产环境。
2.4 性能安全可靠
平台对性能进行了长期优化,在vivo内部历经多个高并发系统验证。我们对agent端录制流量进行了一系列安全防护,例如对相同接口同时只能有一个进入采样中,限制并行录制接口数量。服务端使用了ES储存流量,有效提升了数据储存规模。
三、月光宝盒 实现原理
3.1 整体架构
月光宝盒平台分为2个部分,分别为moonbox-agent 和 moonbox-server(整体架构如下图所示)
moonbox-agent
使用Java-attach技术(实际的动态字节码增强由JVM-Sandbox实现)动态代理到目标进程上,提供流量录制和回放的增强。
moonbox-server
Agent端使用接口,提供配置查询、录制流量保存、流量查询、回放结果保存等服务
录制任务/回放任务的配置,agent任务远程管理能力和管理后台操作界面(前后端分离部署)
3.2 流量录制&回放
流量录制
核心逻辑是将agent分发到用户填写的机器上(本地、远程机器),然后将agent attach到用户填写应用所对应的正确进程上去。然后通过JVM-Sandbox的BEFORE、RETRUN、THROW事件机制拦截关键调用位置获取流量入参、出参。整体流程见下图整体流程见下图:
流量回放
核心逻辑是将agent分发到用户填写的机器上(本地、远程机器),然后将agent attach到用户填写应用所对应的正确进程上去,agent启动后从服务端不断拉取流量去分发到对应接口做回放,整体流程见下图:
心跳管理
Agent启动后会单独开启线程固定间隔时间通过http请求给服务端上报心跳
3.3 Agent启动过程
执行脚本将sandbox agent attach到目标java进程上,sandbox 启动jetty服务,加载moonbox module,然后从服务端拉取moonbox配置,加载流量录制和回放插件。
四、 和 jvm-sandbox-repeater 关系?
Moonbox是基于jvm-sandbox-repeater重新开发的一款流量回放平台产品。在jvm-sandbox-repeater基础上重写了很多模块,并提供了更加丰富功能,同时便于线上部署和使用,和jvm-sandbox-repeater差异如下:
五、为什么要开源?
流量录制回放技术复杂,挑战较高,开源社区虽然有很多类似产品但是在易用性方面都有一些欠缺,我们希望通过开源月光宝盒帮助对该方向有兴趣的开发者快速构建自己的自动化工具,同时可以基于我们这款产品制定个性化诉求。此外,月光宝盒本身也借鉴了jvm-sandbox-repeater设计和方案,是开源的受益方,现在我们将自己思考和探索回馈给开源社区,丰富流量回放开源技术生态。除此之外通过社区中开发者的使用,也可以帮助我们更好的改进我们的工具,获得更多的需求场景输入,也能让该工具获得更加长远的发展。
六、Roadmap
月光宝盒已经完成V1.0.0版本开源,初步完成了各项重要功能开源,后续我们会持续性的完成平台性能、体验优化工作,同时积极收集社区使用反馈的功能需求,将一些好的需求纳入我们版本计划里面。2023年我们规划了一些迭代版本,如下图所示:
七、写在最后
今天月光宝盒的开源只是我们迈出的一小步,后续我们会持续按照计划向社区贡献版本和特性。如果您对月光宝盒有兴趣,欢迎体验我们开源产品。如果您有问题或者更好的方案,欢迎向我们开源项目贡献反馈ISSUE和贡献PR,这将是我们莫大的荣幸。
GItHub项目地址:GitHub - vivo/MoonBox: 月光宝盒:无侵入的流量录制与回放平台 A server-side traffic capture and replay platform with noninvasive
月光宝盒(vivo流量录制回放平台)正式对外开源相关推荐
- 通用流量录制回放工具 jvm-sandbox-repeater 尝鲜 (二)——repeater-console 使用
本文作者陈恒捷是TesterHome社区主编,第十届MTSC大会上海站-开源专场出品人.先后在PP助手.PPmoney.荔枝等公司从事测试效能提升相关工作,在测试技术及效率提升方面有丰富的经验积累. ...
- 通用流量录制回放工具 jvm-sandbox-repeater 尝鲜 (三)—— repeater plugin 开发
本文作者陈恒捷是TesterHome社区主编,第十届MTSC大会上海站-开源专场出品人.先后在PP助手.PPmoney.荔枝等公司从事测试效能提升相关工作,在测试技术及效率提升方面有丰富的经验积累. ...
- 录制快、回放稳,爱奇艺iOS云录制回放平台技术实践
众所周知,移动APP的周期短.迭代速度快,测试人员在保证新功能正常运行的情况下需要回归大量的历史功能,自动化回归便成为重要的回归手段之一.iOS端自动化由于以下问题,一直很难在业务线广泛开展. 落地成 ...
- 通用流量录制回放工具 jvm-sandbox-repeater 尝鲜 (四)——新版带界面 console 的使用
本文作者陈恒捷是TesterHome社区主编,第十届MTSC大会上海站-开源专场出品人.先后在PP助手.PPmoney.荔枝等公司从事测试效能提升相关工作,在测试技术及效率提升方面有丰富的经验积累. ...
- “广智云”工业大数据平台正式对外发布
中国工程院院士谭建荣在高峰论坛上作主旨演讲(记者 赵浛锐 摄) 东莞时间网讯 昨日,第三届广东国际机器人及智能装备博览会的配套活动之一"东莞市智能制造暨工业大数据高峰论坛"召开.中 ...
- 没错,继事理图谱后,我们又搞事情了:数地工场自然语言处理语义开放平台正式对外发布!
2020年的钟声即将敲响,在这辞旧迎新之际,经过近几年在Fintech领域中的自然语言处理技术研发和产品迭代积累,数据地平线Datahorizon迎来重大更新,以数据.事件.逻辑的语义toolbox为 ...
- 流量录制与回放在vivo的落地实践
一.为什么要使用流量录制与回放? 1.1 vivo业务状况 近几年,vivo互联网领域处于高速发展状态,同时由于vivo手机出货量一直在国内名列前茅,经过多年积累,用户规模非常庞大.因此,vivo手机 ...
- java化测试神器-流量回放平台
# java化测试神器-流量回放平台 作者:佳晖,荣荣 文章结构 基本介绍 使用流程 实现方案 总结 基本介绍 背景 目前公司正在进行php java化迁移工作. Java化测试本质上是一次回归工作. ...
- 网络流量可视化分析平台-流影-FlowShadow
专注于网络行为分析识别和威胁行为追溯挖掘 提供轻量级网络行为可视化分析与安全态势感知综合解决方案 适用于入侵检测.攻防演练.威胁狩猎.网络安全态势感知等应用场景 看清网络通讯.看见网络行为.看懂网络威 ...
最新文章
- Java学习总结:16
- 华东师范计算机入门平时作业,计算机入门模拟卷A-华东师范大学.doc
- 2020人工神经网络第一次作业-参考答案第二部分
- Absernt line Number Information
- keepalived(3)——解决无法用vip来访问的问题
- html怎么实现多语言图片切换,JavaScript实现--中英语言切换功能
- Android 自定义阴影,自定义颜色样式
- flink streamGraph生成
- CodeWithMosh--mysql 学习笔记(4) -- 相关数据类型
- 【转载】FPGA静态时序分析——IO口时序
- “舒尔特表”训练法:产生1-25随机数,并打印到一个表格中
- 双耳节拍 枕头_枕头2-3-0不在
- python怎么画钟表表盘,python ——钟表,,1、表盘 1 fro
- 扬帆跨境电商:虾皮如何匹配最佳图片
- uniapp如何引入全局js
- 企业微信内自创建app 获取用户信息问题
- 郑大网教育计算机2017,郑州大学-“2017中国大学生计算机设计大赛河南省级赛”在郑州大学举行...
- 计算机多媒体课件设计,多媒体课件设计与制作 教师课件制作平台
- 码农的自我修养 - ARM V9架构的巨大价值
- js 一个等号= 二个等号== 三个等号=== 的区别