月光宝盒(vivo流量录制回放平台)正式对外开源

作者:vivo 互联网服务器团队- Liu Yanjiang

月光宝盒是一个基于流量录制回放的自动化测试平台,通过录制回放取代编写脚本进行自动化回归,提升测试效率和覆盖率。因为其解决方案具有很强的通用性,所以我们把这它开源出来,希望能帮助到有需要的用户。

一、月光宝盒 是什么?

Moonbox(月光宝盒)是 JVM-Sandbox 生态下的一款流量录制回放产品。所谓流量录制回放是服务端通过挂载agent探针自动注册到服务端,拦截服务端调用,将所有外部调用依赖的内容(如数据库、分布式缓存、外部服务响应等)进行完整记录形成录制流量。其核心价值是通过录制流量数据,将流量数据转化成可复用、可执行的自动化用例,快速在测试环境中进行回放比对接口返回值和外部调用依参数(见下图)。Moonbox(月光宝盒)提供了大量的常用插件,能够对常见的中间调用进行录制回放,同时也提供了非常可靠、高性能的数据存储、计算能力。

image.png

二、月光宝盒 有哪些优势?

正如开头所说月光宝盒是一款面向测试、研发工程师使用的低门槛、高性能、更易于使用的自动化测试工具。这款产品已经在vivo运行了2年多了,经过我们持续优化、打磨拥有很多实用、易用功能。它的优点主要体现在下面几方面:

2.1 全面可视化视操作(部分功能)

(1)基于任务、接口维度的流量管理能力

image.png

(2)详细的流量展示细节(请求、响应、子调用)

image.png

(3)基于任务、接口维度的回放数据管理,叠加各种维度统计、查询能力

image.png

(4)易于人工分析的回放比对结果和差异展示

image.png

2.2 丰富的插件支持

月光宝盒支持非常多组件录制和回放能力,基本上能满足绝大多数人诉求。

image.png

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任务远程管理能力和管理后台操作界面(前后端分离部署)
image.png

3.2 流量录制&回放

流量录制

核心逻辑是将agent分发到用户填写的机器上(本地、远程机器),然后将agent attach到用户填写应用所对应的正确进程上去。然后通过JVM-Sandbox的BEFORE、RETRUN、THROW事件机制拦截关键调用位置获取流量入参、出参。整体流程见下图整体流程见下图:

image.png

流量回放

核心逻辑是将agent分发到用户填写的机器上(本地、远程机器),然后将agent attach到用户填写应用所对应的正确进程上去,agent启动后从服务端不断拉取流量去分发到对应接口做回放,整体流程见下图:

image.png

心跳管理

Agent启动后会单独开启线程固定间隔时间通过http请求给服务端上报心跳

image.png

3.3 Agent启动过程

执行脚本将sandbox agent attach到目标java进程上,sandbox 启动jetty服务,加载moonbox module,然后从服务端拉取moonbox配置,加载流量录制和回放插件。

image.png

四、 和 jvm-sandbox-repeater 关系?

Moonbox是基于jvm-sandbox-repeater重新开发的一款流量回放平台产品。在jvm-sandbox-repeater基础上重写了很多模块,并提供了更加丰富功能,同时便于线上部署和使用,和jvm-sandbox-repeater差异如下:

image.png

五、为什么要开源?

流量录制回放技术复杂,挑战较高,开源社区虽然有很多类似产品但是在易用性方面都有一些欠缺,我们希望通过开源月光宝盒帮助对该方向有兴趣的开发者快速构建自己的自动化工具,同时可以基于我们这款产品制定个性化诉求。此外,月光宝盒本身也借鉴了jvm-sandbox-repeater设计和方案,是开源的受益方,现在我们将自己思考和探索回馈给开源社区,丰富流量回放开源技术生态。除此之外通过社区中开发者的使用,也可以帮助我们更好的改进我们的工具,获得更多的需求场景输入,也能让该工具获得更加长远的发展。

六、Roadmap

月光宝盒已经完成V1.0.0版本开源,初步完成了各项重要功能开源,后续我们会持续性的完成平台性能、体验优化工作,同时积极收集社区使用反馈的功能需求,将一些好的需求纳入我们版本计划里面。2023年我们规划了一些迭代版本,如下图所示:

image.png

七、写在最后

今天月光宝盒的开源只是我们迈出的一小步,后续我们会持续按照计划向社区贡献版本和特性。如果您对月光宝盒有兴趣,欢迎体验我们开源产品。如果您有问题或者更好的方案,欢迎向我们开源项目贡献反馈ISSUE和贡献PR,这将是我们莫大的荣幸。

GItHub项目地址:https://github.com/vivo/MoonBox

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容