当前位置: 首页 > news >正文

朝夕光年游戏自动化测试实践

图片

朝夕光年是面向全球用户与开发者的游戏研发与发行业务品牌,致力于服务全球玩家,帮助玩家在令人惊叹的虚拟世界中一起玩耍与创造。

在游戏的研发过程中,游戏自动化一直是开展难度较大的工程,具体包括机房机架、设备调度、软件框架、算法调校这些中台建设,复杂场景下还需要游戏项目本身的配合。

朝夕光年游戏自动化测试实践核心的工作思路是在自动化能力分解、自动化能力评估、自动化的成熟度、自动化测试全景。

经过这几年的测试实践,目前自动化在兼容性测试、稳定性测试、性能测试、多语言本地化测试、功能回归的部分需求中都有应用,此篇将聚焦分享朝夕光年在自动化能力分解、自动化能力评估、自动化的成熟度、自动化测试全景等四个方面的实践,期望能为行业内开展自动化工作提供思路以及给到对游戏行业/游戏自动化测试方向感兴趣的同学们一些启发。

内容纲要:

  • 自动化能力分解

  • 自动化能力评估

  • 自动化的成熟度

  • 自动化测试全景

自动化能力分解

自动化能力可以分解为驱动和检测两部分,每一部分可以对应多项子能力,把驱动和检测中各项子能力组合便形成自动化应用场景。这种思路化整为零有利于自动化工作的快速落地。

图片

图片

自动化能力评估

图片

召回率又称查全率,精确率又称查准率。一般来说,召回率和精确率二者不可兼得,导致在不同场景下注重指标不同。

自动化的成熟度

按照 Elfriede Dustin 等的“Automated Software Testing”,游戏自动化测试成熟度一般处于 L2。

L2:Incidental Automation

非主要的、附带的
 

回归遗漏明显降低,用例维护成本很高

- 自动化用例主要用作回归兜底,回归遗漏明显降低。

- 自动化用例模块化程度较低,复用性和维护成本很高。


存量分层覆盖,关注准出标准中的核心回归集

- 自动化用例的编写主要聚焦在存量分层覆盖,关注准出标准中的核心回归集。

- 场景级接口自动化全覆盖,其中较稳定场景也实现UI自动化覆盖。

- 用例的维护主要靠人工补充,需投入专项的人力编码回归自动化用例集。

实行双运行机制、面向回归兜底

- 自动化实行双运行机制:流水线触发、离线定时触发维护。

- 自动化主要面向回归兜底卡点,运行时长较短。回归卡点有初步效果,回归遗漏明显降低。


自动化和人工测试环境共用

- 有测试环境,自动化用例和人工测试共用,存在数据干扰,环境较不稳定。自动化用例失败有 50% 以上由环境原因导致。

- 测试环境的部署和更新大多是人工进行的。

测试数据和代码紧耦合

不具备自动化代码和测试数据分离的能力。验证逻辑和测试数据耦合在一起。验证逻辑相同,测试数据不同的情况下,依然需要编码大量的冗余用例。

有度量,不全面;无数据分析

- 建立了部分自动化度量指标,但不全面,且无法做横向对比。

- 会记录自动化发现的问题,但对自动化的过程和结果数据没有收集和分析。

用例版本化管理、有编码工具支持

- 有支持自动化用例编码的工具平台。

- 用例可以版本化管理。

- 缺乏完善的测试框架支持,用例编码成本较高,学习曲线陡峭。

具体来说,主要用在以下两个场景:

  1. 就算人工测试也很难覆盖的场景,这时更看重有效问题指标,有漏报也可接受。

  2. 可替代人工测试的场景,但是能保证召回率 100%,允许有误报,整体成本能比人工低。

自动化测试全景

图片

游戏自动化测试研究成果出来后,在通用驱动能力、通用检测能力、测试效率提升等三方面都带来不错的效果。

     通用驱动能力

通用驱动能力方面比较出圈的进展就是静态 UI 匹配、动态 UI 匹配、自动化兼容性等。静态 UI 匹配经常会遇到一套素材无法很好的在不同分辨率设备上匹配 UI,resize 次数太多,导致经常出现匹配不到或匹配错误的情况。

比如找到“同意”的 UI,第一张图为目标 UI 截图(分辨率为 2400*1080),第二张图为游戏截图(分辨率为 960*540)。

图片

那自动化测试就能实现使用最高分辨率手机对目标 UI 进行截图,优先使用特征点匹配,提高匹配相似度。改进方案后对比的图片相似度达到 0.928。

图片

图片

图片

传统图像识别流程:  

图片

图片

    使用游戏自动化测试模型使用流程:

图片

     通用检测能力

主要涉及深度学习图像测试和聚类筛选图像检测这两个方面。

深度学习图像测试:

利用深度学习训练的控件识别或者问题检测能力虽然不能完全替代人工,但是在过程要求不会太精确的测试场景能取得不错的效果,比如稳定性测试(智能 Monkey)、稳定运营的长尾项目测试等。

图片

能力 1:异形屏异常检测(控件识别)

图片

能力 2:色块检测

图片

能力 3:花屏检测

图片

能力 4:文字超框

图片

能力 5:文字重叠

图片

能力 6:翻译语种错误

聚类筛选图像检测:

发现美术资源效果在不同机型中表现不相同,若每个机型都要测试无疑工作量非常巨大,不适合在人工兼容性测试用例里覆盖,因此需要设计一套自动化资源测试方案来测试不同机型上游戏场景的美术资源,拦截表现不正确的机型 + 场景组合。

图片

基于游戏接口驱动游戏截图保存。将相同档次相近分辨率的设备进行分组,同一小组内相同场景序号的截图两两对比,基于“兼容性问题一般出现在非多数机型”认知下进行全自动聚类分析,从而拦截问题截图。

图片

     测试效率提升

主要是针对深度学习标注和测试素材录制这两方面。

深度学习标注:通过工具提供可视化的图片标注能力,为基于图像自动化能力提供统一的输入、标注、输出方式,提高人效与降低错误率。

测试素材录制:通过素材录制工具快速对游戏界面截图,并确定 UI 匹配区域、ROI 以及操作方法,让业务测试同学不用了解自动化框架也能够执行自动化跑测。

本期技术分享就到这里,欢迎更多热爱游戏与技术的同学们一起加入致力于帮助玩家在令人惊叹的虚拟世界中一起玩耍与创造的朝夕光年,一起通过朝夕努力,创造游戏光年!

相关文章:

朝夕光年游戏自动化测试实践

朝夕光年是面向全球用户与开发者的游戏研发与发行业务品牌,致力于服务全球玩家,帮助玩家在令人惊叹的虚拟世界中一起玩耍与创造。 在游戏的研发过程中,游戏自动化一直是开展难度较大的工程,具体包括机房机架、设备调度、软件框架、…...

数据结构基本概念

一、数据 数据对象-数据元素-数据项(属性),前者由后者组成 二、数据结构 定义:按某种关系的数据元素的集合 三、数据类型 1、原子类型(例如整型) 2、结构类型(由原子类型组成,例如数组) 3、…...

【javaweb】学习日记Day9 - Mybatis 基础操作

目录 一、删除 (1)在mapper接口执行sql删除语句 ① 注解后sql语句没有提示怎么办? (2)测试层 (3)开启mybatis日志 (4)预编译SQL 二、新增 (1&#…...

Mybatis学习|Mybatis缓存:一级缓存、二级缓存

Mybatis缓存 MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地定制和配置缓存。缓存可以极大的提升查询效率。 MyBatis系统中默认定义了两级缓存:一级缓存和二级缓存 默认情况下,只有一级缓存开启。(SqlSession级别的缓存,也称为本地…...

230903文本docx

处理文本 块级项目,每次文本超出右边界时都会添加一行.对段落,边界一般是页边距,但如果按列布局页,则也可是列边界,如果表格单元格内有段,则也可是单元格边界. 块级项属性指定其在页上的位置,如缩进项及段落前后间距.内联项属性一般指定显示内容的如字样,字体大小,粗体和斜体…...

Mysql-DML(数据处理语言)

-- 插入数据 insert into member values(1,张三,21,5000); insert into member(id,name) values(2,李四); insert into member values(3,王五,23,3000) ,(4,纪六,24,4000) ,(5,查七,25,5000); -- 更新(修改数据) 不加限制条件 该字段全部修改 update member set age…...

部署项目至服务器

安装conda https://zhuanlan.zhihu.com/p/489499097 个人租借的服务器如何进行端口的开放呢? 防火墙设置: 添加规则设置: 即可; 通常下租借的服务器没有防火墙设置 相关链接: https://blog.csdn.net/weixin_4520…...

OSI与TCP IP各层的结构与功能,都有哪些协议

分析&回答 OSI七层模型 层功能TCP/IP协议族应用层文件传输,电子邮件,文件服务,虚拟终端TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet表示层数据格式化,代码转换…...

【2023年11月第四版教材】第10章《进度管理》(第三部分)

第10章《进度管理》(第三部分) 7 估算活动持续时间7.1 估算活动持续时间7.2 类比估算★★★7.3 参数估算★★★7.4 三点估算★★★7.5 数据分析★★★ 7 估算活动持续时间 组过程输入工具和技术输出计划4,估算活动持续时间1.项目管理计划(进…...

【Vuex状态管理】Vuex的基本使用;核心概念State、Getters、Mutations、Actions、Modules的基本使用

目录 1_应用状态管理1.1_状态管理1.2_复杂的状态管理1.3_Vuex的状态管理 2_Vuex的基本使用2.1_安装2.2_创建Store2.3_组件中使用store 3_核心概念State3.1_单一状态树3.2_组件获取状态3.3_在setup中使用mapState 4_核心概念Getters4.1_getters的基本使用4.2_getters第二个参数4…...

Linux centos7 bash编程(循环与条件判断)

在编程训练中,循环结构与条件判断十分重要。 根据条件为真为假确定是否执行循环。 有时,根据条件的真假结果,决定执行哪些语句,这就是分支语句。 为了训练分支语句与循环语句,我们设计一个案例: 求一组…...

设计模式-6--装饰者模式(Decorator Pattern)

一、什么是装饰者模式(Decorator Pattern) 装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许你在不修改现有对象的情况下,动态地将新功能附加到对象上。这种模式通过创建一个包装类,…...

质量属性案例-架构真题(二十一)

试题一 某电子商务公司升级会员与促销管理系统,向用户提交个性化服务,提高用户粘性。在项目建立之初,公司领导人一致认为目标是提升会员管理方式的灵活性,由于当前用户规模不大,用户简单,系统方面不需要做…...

nacos Error to process server push response

nacos2.0.3报错&#xff1a; Error to process server push response 解决办法&#xff1a; 排查项目当中有没有直接或间接依赖reflections&#xff1a; <dependency><groupId>org.reflections</groupId><artifactId>reflections</artifactId>…...

神经网络NLP基础 循环神经网络 LSTM

用的时候&#xff0c;只关心token的输入&#xff0c;以及hidden state就好了 sequence的length是多少&#xff0c;lstm的cell的数量就是多少 LSTM BI-LSTM stacked lstm GRU 实现...

Oracle数据传输加密方法

服务器端“dbhome_1\NETWORK\ADMIN\”sqlnet.ora文件中添加 SQLNET.ENCRYPTION_SERVER requested SQLNET.ENCRYPTION_TYPES_SERVER (RC4_256) 添加后新的链接即刻生效&#xff0c;服务器无需重新启动。 也可以通过Net manager管理工具添加 各个参数含义如下&#xff1a; 是…...

Android列表片段

下面创建第二个片段WorkoutFragment&#xff0c;它包含不同训练项目构成的一个列表&#xff0c;用户可以从这个列表中选择训练项目。 列表视图是只包含一个列表的片段 列表片段是一种专门处理列表的片段&#xff0c;它会自动绑定到一个列表视图&#xff0c;所以不需要另外创建…...

【元宇宙】智能手机万岁

凭借出色的新设备&#xff0c;我们很快就能进人元字宙&#xff0c;想象这样的情景是很趣的。但是&#xff0c;至少到21世纪20年代&#xff0c;元宇宙时代的大多数设备很可能是我们已经在使用的设备。 AR 和 VR 设备不仅面临重大的技术、财务和体验障碍&#xff0c;而且它们在上…...

华为mate60的发布代表着什么?有什么意义?

华为Mate60的发布代表着华为在技术领域的持续突破和创新。该产品预计将引入更强大的处理器、更高分辨率的屏幕、更强大的摄像头等前沿技术&#xff0c;进一步巩固华为在技术领域的领先地位。 此外&#xff0c;华为Mate60的发布还具有重塑品牌形象的意义。在美国制裁下&#xff…...

huggingface下载模型文件(基础入门版)

huggingface是一个网站&#xff0c;类似于github&#xff0c;上面拥有众多开源的模型、数据集等资料&#xff0c;人工智能爱好者可以很方便的上面获取需要的数据&#xff0c;也可以上传训练好的模型&#xff0c;制作的数据集等。本文只介绍下载模型的方法&#xff0c;适合新手入…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...