在当今数字化快速发展的时代,软件系统的稳定性和性能至关重要。为了满足某企业的业务需求,提高软件研发效率和质量,全栈式流水线调度平台项目应运而生。该项目在测试过程中展现出了一系列优秀的实践经验,特别是在性能测试方面,为项目的成功实施提供了有力保障。
一、项目背景与目标
为有序推进某平台建设,召开的某平台建设专题会提出了“一平台、多频道”的多部门协作研发要求,形成以“平台+”为思路的架构升级方案。该项目的目标是建设研发过程中持续集成、持续交付(CICD)的流水线调度和运行平台,支持云上容器化、云下主机两大类流水线运行场景,为该企业云上非信创、信创流水线、云下集中构建流水线的运行提供有效支撑,并实现多项具体功能。
二、性能测试优秀实践
(一)挡板模拟流水线压测
1.测试目标:屏蔽流水线插件相关方的影响,主要验证全栈式流水线调度平台的流水线调度能力和运行支撑能力是否符合预期。
2.测试流水线设计:根据中心流水线模板,覆盖典型流水线类型。典型流水线需满足在典型流水线模板基础上设计,覆盖常用生产场景,任务中插件的选择和排序符合常规用户习惯。测试流水线中使用特殊的插件来模拟对资源的占用和特定执行时间,根据生产上每个插件的平均运行时间来设置模拟插件的运行时长,模拟插件对资源的占用情况与生产上每个插件设置的工作负载保持一致。
3.测试场景设计:以TFS流水线生产运行数据为依据,确定某企业流水线的性能测试场景。包括每10s调起一条流水线,至200条流水线全部调起;每2s调起一条流水线,至200条流水线全部调起;1分钟内调起200条流水线。
4.经验分享:在测试中发现流水线任务调度策略存在问题,先调起的流水线任务和后调起的流水线任务在排队时具有相同的权重,导致流水线平均运行时间被拉长。针对此问题,采取的措施是任务调度策略增加优先级控制,赋予先调起的流水线任务更大的权重。通过优化,流水线的成功率达到100%,整体运行时长明显缩短,单条流水线耗时(最大值)和单条流水线耗时(平均值)也得到了显著改善。
(二)全流程贯通流水线压测
1.测试目标:验证某平台性能,包括验证某平台流水线管理模块并发执行流水线场景的性能、验证流水线整体性能、验证调度平台使用真实的流水线插件并发执行流水线调度场景的性能以及验证流水线工具链中基础环境、关键插件的承受能力。
2.测试流水线选型:根据常用流水线类型的使用频次和压测选型分析,选取了云上VUE(Arm+Kylin)、云上VUE(海光+Kylin)、云上VUE(X86+Euler)、云上java(X86+Euler)、云上Java(Arm+Kylin)、云上Java(海光+Kylin)、云下Java集中构建、云下C#集中构建等典型流水线进行压测。
3.测试场景设计:流水线全流程压测分为两轮。第一轮测试场景包括每2s调起一次某企业流水线,至被测流水线被重复调起10、50、100、200次以及1分钟内调起流水线200次。第二轮测试场景包括使用模拟插件验证当前资源条件下待测流水线的最大并发量,测出系统容量值及流水线执行时长拐点,然后使用真实插件对云上、云下流水线进行全流程压测,验证单类流水线的最大并发量,并对多种技术栈类型的流水线进行混合测试,依据TFS流水线运行统计数据,指定混合压测流水线类型的占比。
4.经验分享:在测试中发现云下C#集中构建流水线在压测调起200条场景中,由于运行池并发数限制,导致单条流水线平均耗时1分6秒,运行时间延长65%。执行200条流水线运行场景中,流水线执行完毕后出现资源回收排队甚至卡死的现象,经分析是由于流水线插件运行日志上传ufile出现排队导致。解决方案是将日志从实时上传ufile调整为先存到本地NAS上,然后通过定时任务,每12小时批量上传ufile。经过优化后,流水线的性能得到了有效提升。
(三)试点系统真实流水线对比测试
1.测试目标:通过对比同一条真实流水线在TFS和某平台上的运行统计数据,验证某平台各流水线插件的性能指标是否能够达到TFS上的水平。
2.测试流水线选取:选取A平台FSPP模块和B平台USER模块的CI流水线作为测试对象,对比其在TFS和某平台上的实际运行时长差异。
3.测试场景设计:选取流水线运行高峰时段和平峰时段,在TFS和某平台多次调起同一条流水线运行,统计流水线整体运行时长和各插件运行时长,对比其在TFS和某平台上的实际运行时长差异。
4.经验分享:测试结果显示某平台镜像制作和上传过程的耗时较TFS有比较明显的增长。为解决此问题,采取的措施是将部分版本的基础镜像提前缓存至本地NAS(主要是中心推荐使用的基础镜像版本),命中缓存后自动跳过从制品库下载基础镜像的步骤,有效降低了镜像制作和上传过程的耗时。通过这一优化措施,某平台各流水线插件的性能得到了显著提升,能够更好地满足业务需求。
三、总结与展望
全栈式流水线调度平台项目的成功实施,得益于在性能测试方面的优秀实践经验。通过分阶段策略化的性能测试方法,包括挡板模拟测试、全流程深度测试和真实场景的模拟验证,确保了平台的性能和稳定性。
在未来的工作中,我们将继续深入挖掘和应用优秀的测试实践经验,不断优化和完善测试流程,以适应不断变化的业务需求和技术发展。同时,我们也将积极推广这些优秀实践经验,为其他项目提供参考和借鉴,共同推动该企业的软件研发水平不断提升,为企业业务的持续发展提供坚实的技术支撑。
作者:常会鑫