《4-热部署测试框架(Flytest)-蚂蚁集团-周明新(晗越).pdf》由会员分享,可在线阅读,更多相关《4-热部署测试框架(Flytest)-蚂蚁集团-周明新(晗越).pdf(17页珍藏版)》请在三个皮匠报告上搜索。
1、秒级CI测试框架周明新目 录CONTENTS蚂蚁中的SOFAServerlessSOFAServerless质量工程SOFAServerless质量现状秒级CI测试框架01020304蚂蚁中的SOFAServerless1.0SOFAServerless是一套追求更快部署、弹性伸缩的架构方案。让开发者更低成本实现隔离部署、秒级发布,弹性伸缩。应用拆分基座模块A模块BJava进程模块:承载业务逻辑,快速迭代,热部署基座:沉淀可复用能力,稳定基座仓库模块A仓库模块B仓库部署模块:代码仓库拆分管理在SOFAServerless中,我主要工作聚焦在模块质量上SOFAServerless中的模块1.1通
2、用模型驱动框架频率控制通用下游数据源安全服务基座模块A农村服务入口好友互动喂食结算农场游戏业务流量模块B游戏服务入口交易服务公益类游戏业务流量研发过程解藕模块与基座之间的研发活动完全独立,互不干扰极速研发模块非常轻量,构建到发布上线30s,极大提高研发效率业务隔离通过不同的集群可实现物理隔离、通过不同的场景复原我可以实现流量隔离模块为何要做质量工程建设2.0业内很少有人去谈代码片段(模块)如何做集测(spring用例),这似乎是一个自相矛盾的命题,serverless为了部署速度将代码进行”拆”,集测为了集成度将代码进行”合”,模块作为代码片段,同样存在“拆与合”的矛盾。那为何模块偏偏要走集测
3、这条路,与业内其它faas服务有何不同,不做又会影响什么?模块虽为代码片段,但是与应用从结构上并无两样模块无论承载流量还是代码量都接近应用,与传统的serverless单一服务流量完全不同模块需求变更,对质量同学是灾难性的,需要更底层的集测能力模块目前的质量保障手段2.1本地mock测试接口测试手工测试模块质量体系端到端验证,投入人力较大,存在风险敞口面向模块只能构建本地mokc测试,测试验证不充分,测试风险被右移,成本转给端到端业务吐槽质量太薄,需要风险左移攻坚阶段,质量作为重点战役跟进当前体系下面临的问题?模块质量解决方案探索四时期3.0业内通用解决方案自研测试框架1.0 mock时期2.
4、0 平台调试工具时期3.0 集成测试框架时期聚焦于本地模块自身,无法启动的外部依赖采用mock方式来规避通过端到端验证对外暴露的接口和服务自研模块维度的集成测试框架优点:缺点:简单,无任何外部依赖模块强依赖基座,自我启动进行测试意义不大无法验证模块与基座的交互,例如模块调用基座的jvm服务,并且很多模块 本地已无法启动优点:缺点:简单,成本低模块代码量膨胀后,端到端上的链路无法全覆盖代码逻辑无法支持mock更精细化验证优点:缺点:集成度高,能充分验证基座与模块的交互上手成本极高并且资金等应用本地无法启动难以推广用例调试耗时高,需要启动基座、安装模块4.0Flytest时期优点:缺点:上手快,不
5、需要学习成本用例调试快,即改即生效,10秒左右完成一个用例执行与serverless相辅相成,能解决目前模块用户所有诉求需要人力投入基建建设,例如CI流水线、运行时CI采集利用联调环境来执行用例就是我们的新思路模块质量自研3.03.1用例执行依赖注入应用启动分析测试框架核心流程自研方案开始测试解析TestNg.xml实例化测试类(TestNg切入点)用例执行(原生)结束测试依赖注入利用spring-test spi重新注入模块springContext使用模块SpringContext完成依赖注入集测框架拉取模块基座编译基座通过FatJar启动基座编译模块通过FatJar安装模块使用TestC
6、lassloader重新实例化测试类启动阶段依赖注入阶段基于TestNg自研测试框架3.0测试框架落地3.2收益成本用户上手成本高用户理解成本高测试调试耗时高落地困难,仅5个用户模块集测解决方案链路改造少,复用现有CI链路成本大于收益,何去何从?模块质量自研4.04.0开始测试组装测试参数通过socket调用IDEA插件用例执行结束测试更新测试状态IDEA测试插件组装测试参数找到合适的测试框架将测试参数传给测试框架植入测试listneersocket serverIDEA执行测试用例全流程开始测试测试失败测试成功结束测试TestListener可切入点1可切入点2可切入点1可切入点2参考IDE
7、A中的设计,socket server可以替换为某一个线下环境参考IDEA中的设计,可以通过实现自定义的Testlistener来控制测试状态的变化模块质量自研4.0-Flytest4.1如图,研发人员在本地IDE上触发一个测试用例,本地不需要拉起运行环境,测试包会被转发到云端的30.230.218.61的容器中进行热加载和执行,最后将测试结果返回到研发人员的本地IDE。用例执行更新测试状态云端环境分析IDE用例运行流程自研方案Flytest CI产品4.2基础能力CI一站式解决方案Flytest是一款基于Java实现的测试框架,主要提供测试热部署和热执行能力,能够实现在不停止应用程序的情况下
8、动态加载和执行测试用例,提高了测试效率和灵活性。集测产品业务用例库管理、同步、回归CI节点提效(预计提交50%)线下环境集测调试(创新方案)本地集测调试(预计提效90%)Flytest-Core(热加载)Surefire改造测试产物复用运行时CI覆盖率CI容器预热调度Flytest优势4.3秒级调试能力秒级CI能力应用启动用例执行spring用例需要(2-3min)10msflytest用例不需要10ms在支付宝CES报告中,吐槽声比较高的就有spring调试慢,用户需要应用启动后才能完成一次用例调试,而Flytest利用已部署好的联调环境即可完成一次用例执行,相比之下能提升95%以上的效率。
9、aci容器准备应用编译应用启动用例执行正常CI30s1min需要(2-3min)10msflytest CI复用联调环境提前编译不需要10ms在Flytest中分离了应用启动、应用构建、用例执行,利用联调环境执行已编译好的测试产物,CI执行耗时与用例执行耗时画上等号,目前这套架构和Flytest-core正在积极与研发效能部合作极速CI项目,预计CI提效50%。Flytest核心技术之一热部署4.4Flytest核心技术之一热执行4.5应用测试资产TestNgRnnerJunit4RunnerJunit5RunnerClass TestNgRunner TestNg testng=new TestNg;testng.run();Class Junit4Runner JunitCore runner=new JunitCore();runner.run(testRunner);Class Junit5Runner Launcher launcher=LauncherFactory.create(config);launcher.execute(request);Flytest核心驱动1、运行热部署的测试资产2、支持主流的三种测试框架