作者: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项目地址:https://github.com/vivo/MoonBox

月光宝盒(vivo流量录制回放平台)正式对外开源的更多相关文章

  1. 流量录制回放工具jvm-sandbox-repeater入门篇——录制和回放

    在上一篇文章中,把repeater服务部署介绍清楚了,详细可见:流量录制回放工具jvm-sandbox-repeater入门篇--服务部署 今天在基于上篇内容基础上,再来分享下流量录制和回放的相关内容 ...

  2. 流量录制回放工具jvm-sandbox-repeater入门篇——服务部署

    趋于当前技术不断更新.产品功能多元化之下,流量回放的热度也是越来越高. 在前一段时间,测试团队也提到阿里开源的流量回放工具 jvm-sandbox-repeater 我个人就先尝试一下,期间还是遇到一 ...

  3. 喜大普奔!Fanvas正式对外开源了,一键把Flash转为Canvas动画!移动终端动画开发不再困难。

    http://code.tencent.com/ https://github.com/TencentOpen/Fanvas DEMO: http://kenkozheng.github.io/fan ...

  4. 流量录制与回放在vivo的落地实践

    一.为什么要使用流量录制与回放? 1.1 vivo业务状况 近几年,vivo互联网领域处于高速发展状态,同时由于vivo手机出货量一直在国内名列前茅,经过多年积累,用户规模非常庞大.因此,vivo手机 ...

  5. vivo数据库与存储平台的建设和探索

    本文根据Xiao Bo老师在"2021 vivo开发者大会"现场演讲内容整理而成.公众号回复[2021VDC]获取互联网技术分会场议题相关资料. 一.数据库与存储平台建设背景 以史 ...

  6. 【Android测试】【第十节】MonkeyRunner—— 录制回放

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4861693.html 前言 在实际项目进行过程中,频繁的需 ...

  7. vivo如何录制手机视频 分享简单的操作方法

    智能手机功能不断的发展更新,手机已经普及到每一个人,在日常的生活或者工作中都离不开手机,手机中的功能例如一些小视频软件都是非常有趣的,vivo如何录制手机视频?下面我们一起来看看吧! 使用工具:手机 ...

  8. 【SoloPi】SoloPi使用2-功能使用,录制回放

    Soloπ是什么Soloπ是一个无线化.非侵入式的Android自动化工具,公测版拥有录制回放.性能测试.一机多控三项主要功能,能为测试开发人员节省宝贵时间. 录制回放功能在Soloπ的录制模式对应用 ...

  9. adhoc-海量数据多维自助即席查询平台-mdrill项目开源啦

    adhoc-海量数据多维自助即席查询平台-mdrill项目开源啦 1:mdrill是阿里妈妈-adhoc-海量数据多维自助即席查询平台下的一个子项目. 2:mdrill旨在帮助用户在几秒到几十秒的时间 ...

  10. Ninject是一款.Net平台下的开源依赖注入框架

    Ninject是一款.Net平台下的开源依赖注入框架.按照官方说法,它快如闪电.超级轻量,且充分利用了.Net的最新语法,使用Lambda表达式代替Xml文件完成类型绑定.Ninject结构精巧,功能 ...

随机推荐

  1. Jmeter五、jmeter中的逻辑控制器

    1.simple controller 提供一个块的结构和控制.更方便,更清晰. 嵌套其他的controller 2.loop controller 循环控制器 控制循环次数 可以使用变量 ${__t ...

  2. maven项目资源导出问题

    maven由于他的约定大于配置,我们之后可以能遇到我们写的配置文件,无法被导出或者生效的问题,解决方案: <!--在build中配置resources,来防止我们资源导出失败的问题--> ...

  3. 最重要的Git命令行

    git命令行记录 Git 如何删除本地分支和远程分支 git checkout master git branch -a git push origin --delete dev 删除后,再次查看分支 ...

  4. 循环神经网络(Recurrent Neural Networks)(第一部分)

    参考 https://www.cnblogs.com/royhoo/p/Recurrent-Neural-Networks-1.html

  5. sqlite bundle 的含义,和 sqlite.dll, SQLite.Interop.dll, System.Data.SQLite.dll 三者之间的关系

    sqlite bundle 的含义,和 sqlite.dll, SQLite.Interop.dll, System.Data.SQLite.dll 三者之间的关系. bundle 表示不需要配合 S ...

  6. consul 服务注册与更新

    服务注册与发现是微服务架构中不可或缺的重要组件. 起初服务都是单节点的,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问.直到后来出现了多个节点的分布式架构,起初的解决手段是在服 ...

  7. AD域服务相关知识

    一.活动目录及意义 活动目录:windows网络中的目录服务(Directory Service),即活动目录域服务(AD DS) 目录服务:目录和与目录相关服务 活动目录负责目录数据库的保存.新建. ...

  8. 泛型 ? extends E ? super E的区别

    package cn.itcast.generic; import java.util.ArrayList;import java.util.Collection; public class Supp ...

  9. Action: Consider the following: If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.

    错误原因 在pom中引入了mybatis-spring-boot-starter ,Spring boot默认会加载org.springframework.boot.autoconfigure.jdb ...

  10. mysql数据迁移,通用windows->linux,linux->windows

    1. 将用到的数据库文件夹直接拷贝到目标文件夹,mysql5.7在linux中默认在var/lib/mysql,将data下ibdata1也要拷贝进去 2. linux下需要将所有者root改为mys ...