乐享元游的 UWA Pipeline 最佳实践分享
“躬身入局 践行游戏研发工业化”是UWA在2022年研发上坚持的方向,其中UWA Pipeline更是今年在工业化部署上的一个重要的突破口。在近一年里,越来越多的游戏研发团队在日常项目生产开发中,使用UWA Pipeline搭建了符合自身需求的DevOps研发交付流水线,通过自动化测试及各项性能保障服务的功能,为项目进程提供助力。
为了帮助大家更好地了解游戏研发团队是如何使用并用好UWA Pipeline,我们有幸和乐享元游(下文简称:元游)团队进行了深入的交流,向大家分享元游使用UWA Pipeline的经验和心得,希望能为更多团队在自身项目工作流的搭建和运行上提供些许思路。
一、为什么要这样搭建流水线
元游团队主要是为了解决这两个问题:
- 性能优化、性能管理
- 游戏内容验收
为此团队使用UWA Pipeline搭建了以下流水线,可以看出,元游团队主要以“功能测试”和“项目归属”作为流水线的分类方式。
1. 功能测试专用的小型流水线
元游团队创建了多条“新手关测试用例+UWA GOT Online”相结合的流水线,专门用于对新手流程进行各项性能的自动化测试。
从下图中可以看出这些流水线至少涵盖了GOT Online的Overview、Resource和Lua测试模式,提高了测试任务的执行效率。
当然,如果希望对整体项目中的某个具体部分,比如UI遍历、场景切换、挂机、特效播放等进行频繁地测试,以验证在项目中的实际效果。同样可以运用“特定测试用例+GOT Online”相结合的流水线完成自动测试和性能测评数据的自动提交。
这样使用的好处在于,每条流水线聚焦在相对单一的测试需求上,可以由成员根据实际情况灵活部署。一旦有新的测试用例需求或者更新,只要维护自动化测试脚本即可。既达到了每天自动化测试的目的,又不会给流水线维护带来额外的工作量。
2. 以项目为单位进行管理
除了将上述流水线单独管理外,元游团队还将相当数量的流水线,按照项目归集,用不同的文件夹进行管理。
在单个文件夹下,我们可以有多条不同功能的流水线,例如:打包、安装包、热更新、打包+AssetBundle检测、打包+Lua检测、企业微信通知等。而且不同的项目彼此还有着功能相似的流水线。
当团队中有多个项目共用UWA Pipeline时,以项目归属来管理流水线,一方面更符合管理需求,项目成员可以准确找到并部署本项目的相关流水线,避免其它项目的干扰;另一方面,项目组可以为文件夹添加权限管理,从而确保非该项目人员不能操作流水线,提高了运行状况的保密性。
3. 多任务组合
从元游团队搭建功能专一的流水线用于日常测试的经验,我们可以发现,Pipeline内的各项功能能够依据项目开发的实际需求,像乐高积木一样搭配组合,同时可拓展为特定功能的流水线。
例如“打包+Build Report”的组合,在出包的同时,团队可以对项目的编译、出包过程进行更全面的了解,快速找出可能存在的问题,进一步优化项目的资源结构、出包步骤和流程耗时。详情可见《UWA Pipeline 新功能|构建分析、自动化测试支持iOS平台》。
或者“本地资源检测+AssetBundle资源检测”的组合,让项目在静态工程阶段就能自动检查数量庞大的各项资源情况,通过相关报告直接按图索骥,找到潜在的资源冗余、设置错误、不规范使用等问题,对项目的包体大小、性能表现、内存占用等,进行精准的优化。
二、如何通过Pipeline实现常态化性能监控和反馈流程
在交流中我们了解到,元游团队通过UWA Pipeline,在日常开发中对项目建立了有效的常态化性能测试监控,形成了高效的问题收集与反馈。
1. 常态化性能测试与监控
完善的流水线搭建与运行,帮助元游团队摆脱了传统人力测试的桎梏,在解放团队人力的同时,为大规模的性能测试与监控提供了有力支持。
例如现阶段,利用UWAPipeline结合GOT Online功能,元游团队每天都在十几台移动设备上进行新手流程的各项性能测试,在监控项目实际真机表现的同时,团队也能根据性能报告及时验证每天在新手阶段各项改动内容的效果,从而发现可能的潜在问题。
为了解决需要大量人力和时间才能进行的重复的测试、分析和验证工作。我们从元游的Pipeline搭建中得到一些启发,可以通过以下这几个步骤实现常态化性能测试与监控:
1)选择测试设备
根据项目目标市场和玩家定位,根据移动设备算力,选择高、中、低档的测试机型,以确保了在测试时能获取项目在真机上较为全面的性能表现。
2)维护测试脚本
元游团队专门维护了一份新手用例脚本供日常测试调用。由于新手流程的测试脚本相对比较固定,在第一个较完整版本的基础上微调即可,维护成本较低,复用性较高。这样就可以实现每天在十几台测试设备上完成新手流程的正常测试。而且因为脚本的精确执行,避免了传统人工测试中,人为操作的干扰,进一步确保了测试结果的相对一致性。
UWA Pipeline的用例管理模块
用于存放管理各个项目适用的脚本文件
由此延伸,针对角色的创建流程(比如种族、性别、捏脸、服饰、职业等),副本的战斗(比如日常金币、经验、组队、对抗等),大地图的遍历(副本场景、主城、野外大地形等),UI遍历等,大家都可以根据实际需求,维护一批可用的测试脚本,为后续的自动化测试提供保障。
3)搭建流水线
如图所示,元游团队为新手流程创建了GOT Online性能测试的Pipeline流水线,对应Overview、Resource、Mono和Lua模式,根据提示选择正确的项目、安装包、测试脚本、机型等配置信息,这样一条可以针对制定内容进行自动化性能测试的流水线就搭建完成了。
4)查看测评报告
在流水线执行完测试任务后,相关的测试数据会自动上传至UWA官网进行分析。元游团队就可以得到一份针对新手流程操作的自动化测试报告和设定的GOT Online对应测试模式的性能报告。
由此,在UWA Pipeline的使用中,针对项目某一部分内容在日常开发中高频的验证与反馈需求,大家可以参考元游目前执行的“选择测试设备+维护测试脚本+搭建流水线+查看测评报告”的方式,每天或固定一段时间完成Pipeline设定的任务。
2. 高效的问题收集与反馈
通过UWA Pipeline流水线,大部分与测试相关的任务都可以在不干扰项目正常开发进程的情况下,在非工作时间段自动运行。那如何快速地将发生的问题反馈给研发人员呢?
为了解决这“最后一公里”,元游团队在日常的Pipeline流水线运行中,实现了“将卡顿等异常情况进行截图,并发送到企业微信”,让研发人员可以在第一时间得到信息,从而对测试任务进行调整和修改,并根据接收到的截图等记录,准确定位问题,为后续的复现与排查提供极大便利。
所以大家在日常使用UWA Pipeline的各项功能时,也可以关注各项问题的收集与反馈,比如在自动化测试报告中,UWA会提供每一个步骤的执行情况与截图:
在使用云真机功能时,大家对异常现象可以及时进行截图以及开启相关的Log记录:
还可以与第三方办公工具结合,通过发送邮件等方式,及时同步流水线执行的相关信息:
在Pipeline配置邮件相关信息,再通过流水线回调功能
将执行情况反馈给团队成员
三、问题与思考
在深入交流中UWA也了解到,元游团队在Pipeline的日常使用中,也出现了几个具有代表性的问题,对此UWA也提供了建议:
1. 异常情况如何及时干预
UWA Pipeline可以在下班后、半夜等非工作时间段运行设定的自动化测试等任务,从而解放人力,不干扰项目日常进程。但在实际使用中元游团队发现,一旦发生设备掉线、运行状况不稳定、任务执行失败等突发情况,人员无法及时进行干预与处理。
在这个问题上,一方面,建议大家要经常检查和维护接入Pipeline的真机设备、数据连接线、USB接口等硬件设施,及时更换破损、接触不良的的线路设备。
使用类似图示这样的设备机架,可以很方便地分类收容设备和查看设备的连接与运行状态
另一方面,项目安装包要提前进行真机上的安装、运行等验证,相关的自动化脚本也要及时进行调整和修改,避免在测试途中出现安装失败、脚本不匹配等问题。同时,自Pipeline推出以来,UWA也在持续不断对设备连接、任务运行的稳定性进行着大量测试与完善,不断提高Pipeline的使用体验。
2. 及时更新SDK
UWA建议,大家可以在Pipeline流水线内编写合适的逻辑,在每次出包前,进行UWA SDK的集成,确保用于测试的安装包中是最新的SDK版本。
3. 如何降低自动化功能使用门槛
元游团队的自动化测试是技术主导的,因此用例上更偏向性能优化方向。在交流过程中,元游团队还表达了这样的感受:一方面,由于项目的开发改动,相关的自动化脚本也需要进行相应的修改;另一方面,脚本的编写与调试需要一定的知识技术储备,测试人员在使用相关功能时,面临着不小的技能门槛。
针对测试人员的这些痛点,UWA也在Pipeline内做了相应的对策与完善,努力降低测试人员的使用门槛:
1)多设备调试
在Pipeline云真机系统的基础上,UWA进一步推出了“多设备调试”功能,让测试人员通过控制一台设备,就能同步操控整个真机集群,在一定程度上,帮助测试人员降低了执行大批量测试任务的难度。详情可参见《前进永无止境!Pipeline更新又双叒叕来了!》。
2)任务管理-创建任务
测试人员只需通过“任务管理”模块,确认好任务所需的设备、安装包和脚本文件等信息,简单点击就可以随时开展自动化测试。详情可参见《UWA Pipeline 功能详解|可视化配置自动测试》。
3)学习资料
UWA一直在不断努力,尝试降低测试人员学习、使用自动化相关知识的门槛,让测试人员可以通过简单的图像识别等功能,编写可用的自动化脚本文件。
例如通过学习Airtest,可以在较短时间内编写出适合的脚本
同时,UWA也提供脚本编写服务,由UWA负责编写、调试符合项目需求的脚本文件,帮助有需要的团队顺利开展后续的自动化测试。
最后,我们再汇总一下元游团队的项目流程用例设计逻辑,供各位读者参考。
1 真实游戏性能测试
通过真实游戏性能数据,进行迭代优化,用于评估和验证整体性能问题。
测试用例:新手流程、UI遍历、挂机刷怪。
小技巧:自动化测试代码模块化。创号、登录等流程必须要公用,不同的用例都可以调用。
效果:结合着规范和底层代码的优化,增量业务出问题的情况大幅降低,结合定期查看报告性能表现非常稳定。
2 静态资源检测
通过UWA的本地资源检测,评估和验证基础资源问题。
3 资源运行时检测
通过真机测试美术资源,做美术资源的性能报告,解决静态资源检测不好落地的问题,用于评估和验证个别资源性能问题。真机测试是硬指标!
定制资源测试代码,真机测试资源运行性能。
4 游戏回归测试
以上,就是元游团队在UWA Pipeline使用上的经验分享,希望能为大家在项目工业化开发上带来启发。在此表示对元游团队的感谢!未来,UWA也希望可以和更多团队深入合作与交流,分享更多UWA Pipeline的使用心得和成功方案,一起学习,一起进步。