乐享元游的 UWA Pipeline 最佳实践分享

news2024/10/5 20:27:08

“躬身入局 践行游戏研发工业化”是UWA在2022年研发上坚持的方向,其中UWA Pipeline更是今年在工业化部署上的一个重要的突破口。在近一年里,越来越多的游戏研发团队在日常项目生产开发中,使用UWA Pipeline搭建了符合自身需求的DevOps研发交付流水线,通过自动化测试及各项性能保障服务的功能,为项目进程提供助力。

为了帮助大家更好地了解游戏研发团队是如何使用并用好UWA Pipeline,我们有幸和乐享元游(下文简称:元游)团队进行了深入的交流,向大家分享元游使用UWA Pipeline的经验和心得,希望能为更多团队在自身项目工作流的搭建和运行上提供些许思路。

一、为什么要这样搭建流水线

元游团队主要是为了解决这两个问题:

  1. 性能优化、性能管理
  2. 游戏内容验收

为此团队使用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的使用心得和成功方案,一起学习,一起进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/74017.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

fat32文件系统分析

fat32文件系统结构: fat32文件系统比fat16文件系统少了根目录FDT,其实是将根目录归结到数据区中了。 注意数据区第一个扇区所在蔟为2号蔟。 首先在磁盘管理中创建一个fat32磁盘: 大小为16GB。 使用winhex打开磁盘。 可以看到MBR在扇区0处…

AI推理卡/tensorRT c++

#####AI 推理卡:我的需求是x86上Nvidia显卡训练好的模型 用在AI推理卡上进行推理### AI 推理卡 环境配置 安装ubuntu系统、AI推理卡环境 1,安装ubuntu20.04.4 过程忽略,网上教程很多。 2,ubuntu20.04.4设置root登录&#xf…

入门系列 - Git基本操作

本篇文章,是基于我自用Linux系统中的自定义文件夹“test_rep”,当做示例演示 具体Git仓库的目录在:/usr/local/git/test_rep Git基本操作 之前我们已经创建了 Git 版本库了,下一步我们将进行一些 Git 的基本操作。 有关 Git 版本…

微服务框架 SpringCloud微服务架构 28 数据同步 28.3 声明队列和交换机

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构28 数据同步28.3 声明队列和交换机28.3.1 直接开干28 数据同步 28.3 声明…

【Mybatis】一级缓存和二级缓存

【Mybatis】一级缓存和二级缓存(一)为什么需要缓存(二)一级缓存(在SqlSession上缓存)【1】示例代码【2】增删改操作会刷新一级缓存【3】一级缓存流程总结(1)一级缓存简介&#xff08…

多点DMALL冲刺港股:年亏损超9亿 腾讯IDG金蝶是股东

雷递网 雷建平 12月8日多点数智有限公司(简称:“多点数智”)日前递交招股书,准备在港交所上市。年亏损超9亿多点DMALL成立于2015年,为本地零售业提供基于云的一站式端到端的数字零售SaaS平台。多点DMALL提供的服务包括…

搜索是过拟合的生成;生成是欠拟合的搜索

神经搜索的最大竞争者可能来自于一种甚至不需要向量嵌入作为中间表示的技术 —— 一种直接返回你想要的结果的端到端技术。"那么,谁将是神经搜索最大的竞争对手?"本文作者:肖涵,Jina AI 创始人兼 CEO 谁将是神经搜索最大…

Redis框架(二):SpringDataRedis入门和序列化方式解决内存占用问题

SpringDataRedis入门和序列化方式解决内存占用问题基本介绍实例Demo自定义RedisTemplate序列化自定义的RestTemplate的内存占用问题StringRedisTemplate解决内存占用问题总结SpringCloud章节复习已经过去,新的章节Redis开始了,这个章节中将会回顾Redis 主…

c#入门-可选参数,不定长参数

可选参数 声明可选参数 函数的参数在声明时,可以同时为其赋值一个常量。 但是所有这样的参数,需要在所有必填参数的后面。 void Any(int i 10) {Console.WriteLine(i); }使用可选参数 稍后,在调用函数时,你可以不填可选参数。…

1 - 线程池的基础用法

参考:线程池的基本用法 - 简书 1、为什么要用线程池? 在java中,开启线程的方式一般分为以下三种: a. 继承Thread,实现其run方法; b. 实现Runnabler接口,通过Thread来实现线程; …

法的概念与大纲

一、法的概念 法是由国家制定或认可并由国家强制力保证实施的,反映特定物质生活条件所决定的统治阶级意志,以权利和义务为内容,以确认、保护和发展对统治阶级有利的社会关系和社会秩序为目的的规范系统。 二、法的特征 规范性 国家意志性 权…

微信恢复大师花了200多,套路一环接一环!

数据恢复本是一个科技进步的体现,让误操作导致的重要数据可以找回来。但是近年来数据恢复跟诈骗挂钩,数据恢复本是利好的事情,为什么会跟诈骗挂钩。究竟是什么原因呢?最近小编发现,百度推荐词出现:“微信恢…

Neural Network-神经网络算法本质

1. Word2vec~single CBOW算法推导BP word2vec主要实现方式有:skip-gram和CBOW。 CBOW的目的是根据上下文contextual words来预测当前中心词的概率,且上下文所有单词对当前中心词出现的概率影响权重是一样的,如在袋子中取词,取出…

痞子衡嵌入式:国内外串行NOR Flash厂商官网Cross Reference功能使用体验

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家讲的是国内外串行NOR Flash厂商官网Cross Reference功能。 串行 NOR Flash 是一个相对发展稳定的市场,目前全球市场约 90% 的份额被中国的三家厂商(Winbond华邦/MXIC旺宏/GigaDevice兆…

Java入门教程(26)——继承

文章目录1.继承的作用2.继承的关键字3.继承的特点4.实例5.instanceof 运算符继承是面向对象三大特征之一,继承可以让我们减少代码量,实现类的复用1.继承的作用 代码复用,更加容易实现类的扩展方便建模 2.继承的关键字 extends,…

网站都变灰了,几行代码可以实现

前言 这两天,我们经常逛的好多网站、app首页都变灰了,原因大家应该都知道了 网站变灰 ①B站 ②爱奇艺 ③ 腾讯视频 ④ csdn ⑤百度 怎么实现的呢? 难道这些网站开发商在网站开发的时候都准备一套灰色主题的UI么? 好奇心…

端水or信仰?ChatGPT“点评”Web3未来

近日,OpenAI发布了人工智能聊天机器人模型 ChatGPT,产品自11月30日发布到现在仅一周时间,就积累了上百万用户,广受大家好评。有人让它写代码,有人拿高考题目考验它,这些“难题”似乎都难不倒它,…

vue3 教程(上)

学 vue3 通过官方文档更详细,不过阅读本博客,可以更容易理解,且帮你速成! 官方文档(记得将API风格偏好切换为 组合式 否则你学的是vue2) https://cn.vuejs.org/guide/introduction.html 学习前的准备 创建…

[synchronized ]关键字详解

目录 1.synchronized 特性 1.1互斥性 1.2内存刷新 1.3可重入 2.Java 标准库中的线程安全类 3.死锁问题 3.1 一个线程,一把锁 3.2 两个线程,两把锁 3.3 多个线程,多把锁 4.死锁的条件 1.synchronized 特性 1.1互斥性 synchronized 关键字会起到互斥效果,当某个线程执…

【C语言】字符串函数(一)

目录 一、strlen函数(计算字符串长度) 1、strlen函数的用途 2、strlen函数的使用 3、strlen函数的模拟实现 二、strcpy函数(字符串拷贝) 1、strcpy函数的用途 2、strcpy函数的使用 3、strcpy函数的模拟实现 三、strcat函数(字符串追加) 1、strcat函数的用途 2、strcat函数的使用…