LiuYanjiang月光宝盒:全面可视化视操作(部分功能)
作者:vivo互联网服务器团队-刘彦江
月光盒子是一个基于流量记录和回放的手动测试平台。 它使用录制和回放而不是编写脚本进行手动回归,以提高测试效率和覆盖率。 由于它的解决方案通用性很强,我们将其开源,希望能够帮助到有需要的用户。
1.什么是月光宝盒?
Moonbox(月光盒)是JVM-Sandbox生态下的流量记录和回放产品。 所谓流量录播是指服务器通过挂载代理探针手动注册到服务器,拦截服务器调用,记录外部调用所依赖的所有内容(如数据库、分布式缓存、外部服务响应等),产生记录流量。 其核心价值是通过记录流量数据,将流量数据转化为可复用、可执行的手动用例,并在测试环境中快速进行回放对比,对比socket返回值和外部调用参数(见右图)。 Moonbox(月光盒)提供了大量常用的插件来记录和回放常见的中间调用,同时还提供了非常可靠、高性能的数据存储和计算能力。
2、月光宝盒有哪些优势?
正如一开始提到的,Moonlight Box是一款低门槛、高性能、更易用的手动测试工具,适合测试和研发工程师使用。 该产品已在vivo运行2年多。 经过我们不断的优化和打磨,它拥有了很多实用又好用的功能。 其优点主要表现在以下几个方面:
2.1 综合可视化操作(部分功能)
(1) 基于任务和接口维度的流量管理能力
(2) 详细的流量显示详情(请求、响应、子调用)
(3)基于任务和界面维度的回放数据管理,叠加各维度的统计和查询能力
(4)回放对比结果及差异显示,方便手动分析
2.2 丰富的插件支持
Moonlight Box支持特殊的多分量录音和播放功能,基本可以满足大多数人的需求。
2.3 多种部署形式
据悉,月光盒子是一个前后端分离的项目。 当你使用这个项目的时候,需要将后端和后端分开部署,这对于你后面将项目部署到生产环境有很大的帮助。
2.4 性能安全可靠
平台性能经过多年优化,并经过vivo内部多个高并发系统的验证。 我们对Agent侧的录音流量实施了一系列的安全保护,比如同一时间对同一个socket只能进行一次step-in采样,限制并行录音socket的数量等。 服务器使用ES存储流量,有效增加数据存储规模。
3. 月光盒子的实现原理 3.1 总体结构
Moonbox平台分为两部分直播聚合,即moonbox-agent和moonbox-server(整体结构如右图所示)
Moonbox-代理
使用Java-attach技术(实际的动态字节码改进是通过JVM-Sandbox实现的)动态代理到目标进程,提供流量记录和回放改进。
Moonbox服务器
3.2 行车记录与回放
交通记录
核心逻辑是将代理分发到用户填写的机器(本地和远程机器)上,然后将代理附加到用户填写的应用程序对应的正确进程上。 之后利用JVM-Sandbox的BEFORE、RETRUN、THROW风暴机制拦截关键调用位置,获取流量输入输出参数。 整体流程见右图 整体流程右图:
交通回放
核心逻辑是将代理分发到用户填写的机器(本地和远程机器)上,然后将代理附加到用户填写的应用程序对应的正确进程上。 Agent启动后,不断从服务器拉取流量,分发到对应的socket上进行播放。 整体流程如右图所示:
脉搏管理
Agent启动后,会单独开启线程,以固定的时间间隔通过HTTP请求向服务器报告脉冲。
3.3Agent启动流程
执行脚本将 sandboxagent 附加到目标 java 进程。 沙箱启动jetty服务,加载moonbox模块,然后从服务器拉取moonbox配置,并加载流量记录和播放插件。
4. 与jvm-sandbox-repeater的关系?
Moonbox是基于jvm-sandbox-repeater重新开发的流量播放平台产品。 在jvm-sandbox-repeater的基础上,重新绘制了很多模块,提供了更多的功能。 同时,易于在线部署和使用。 与jvm-sandbox-repeater的区别如下:
5. 为什么要开源?
交通记录和回放技术复杂且具有挑战性。 事实上,开源社区中有很多类似的产品,其中一些在易用性方面有所欠缺。 我们希望通过开源的Moonlight Box帮助对此方向感兴趣的开发者快速构建自己的手动工具。 同时,他们可以根据我们的产品制定个性化诉求。 据悉,Moonlight Box本身也借鉴了jvm-sandbox-repeater的设计和解决方案,这是开源的受益者。 现在我们将把自己的思考和探索回馈给开源社区,丰富流量播放的开源技术生态。 另外,通过社区开发者的使用,也可以帮助我们更好的完善我们的工具,获得更多的需求场景输入直播宝盒有哪些,让工具能够实现更长远的发展。
6. 路线图
月光盒子V1.0.0版本已经开源,各项重要功能已初步开源。 未来我们将继续完成平台性能和体验优化。 同时,我们会积极收集社区反馈的功能需求,并将一些好的需求纳入我们的版本计划中。 2023年,我们计划一些迭代版本,如右图:
七、写在最后
Moonlight Box明天的开源只是我们迈出的一小步,我们将继续按计划向社区贡献版本和功能。 如果您对Moonlight Box感兴趣,欢迎体验我们的开源产品。 如果您有任何疑问或者更好的解决方案,欢迎贡献反馈ISSUE并为我们的开源项目贡献PR,这将是我们的荣幸。
GitHub项目地址:/vivo/MoonBo...