共计 2320 个字符,预计需要花费 6 分钟才能阅读完成。
作者: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