游戏测试 游戏自动化测试三三二二

IAmTester · 2019年04月30日 · 最后由 olive1018 回复于 2020年10月14日 · 161 次阅读

游戏自动化测试三三二二
(0)前言
(1)是什么?
(2)为什么?
(3)怎么做?
(4)趋势
(5)总结(吐槽)

前言
3 年工作经验,做了 2 年的游戏自动化测试,有基于图像识别的、有基于控件识别的,技术渣渣的(不是谦虚),做游戏自动化过程中有很多瑕疵,但也能让游戏自动化测试完整的运行下来,下面对我这 2 年来的工作关于游戏自动化测试做一些总结吧,希望可以抛砖引玉,能有一些大牛出来指出我的不足,给予我任意方面的成长

是什么?
面试了很多实习生、社招生,大部分学生不太清楚或者不能表达清楚什么是游戏自动化测试。游戏自动化测试我觉得可以是很多,单元测试、接口测试、性能测试、功能测试、UI 测试,基于代码脱离人工的测试我认为都可以归类为游戏自动化测试。这里仅讨论 UI 自动化测试,更进一步的说是讨论图像识别的自动化测试技术。UI 自动化测试,是指在无人工直接参与情况下,通过模拟玩家人工操作游戏的 UI 界面,以代码的方式实现自动点击、自动按键等、同时验证预期结果的一种自动化测试方式。,现在公司级的游戏自动化测试,应该大部分使用的是 python 代码。核心原理的话应该通过 cv 模块实现图像识别,通过 pyautogui 或者 win32api 识别模拟用户点击等操作

为什么?
为什么要做游戏 UI 自动化测试?应该有 2 个最重要的原因:测试效率、测试质量。批量的执行测试用例测试脚本,肯定比手动测试更快速,缩短测试周期提高测试效率。通过测试脚本的预期结果检测,规避低级的人工疏忽的 bug 能够提高测试质量。当然肯定还有其他的因素,比如解放人力,让人工同步进行其他测试。在这里其实有 2 个疑问,如何保证自动化测试的可靠性,同时功能测试覆盖度是否会达到 100%,先说可靠性,自动化测试质量的,取决于测试用例的可靠性,再进一步决定了测试脚本的可靠性。所编写的用例都无法发现 bug,测试脚本更不用说了。覆盖度,目前我觉得达不到百分百,比如一些需要人工的主观判断,但是未来随着技术的发展,我觉得可以达到 100%

怎么做?
一些公司做游戏自动化测试,应该是如上所说用 python,然后编写 api 实现游戏自动化测试,但是一些 “散户”,可能就用按键精灵、TC 综合开发工具、大漠等等这些插件来实现。方式大同小异,都是基于模拟用户操作,但是不是所有的游戏都适合模拟用户操作。这几年年来,游戏引擎越来越多,比如 unity3D 引擎、laya 引擎、白鹭引擎等等这些都不适合做图像识别的游戏自动化测试。不同时期、不同引擎的游戏,选择自动化测试方式应该也是不一样的。稳定运营的游戏,UI 在较长一段时间内不会变动,2.5D 或者 2D 更适合使用基于图像识别的游戏自动化测试,3D 的话不适合做图像识别的游戏 UI 自动化测试。举个例子,2.5D 的游戏,玩家在一个坐标点,面对一个 NPC,NPC 面对玩家的画面是可以预期的,而 3D 的话,同一个坐标点,NPC 的画面是呈现给玩家的画面不是唯一的(看向天空或地板就不一样),但是对于没有 3D 效果的 UI,比如 3D 游戏中的背包按钮或其他界面类按钮,这种模块也是适合做图像识别的自动化测试的,具体使用什么方式进行游戏自动化测试,要视情况而定。

运营一段时间后的游戏(中期),游戏功能较为完善,但是在 UI 上相对稳定期的还是频繁,适合做控件识别类(即内嵌 SDK)的,目前我们已经增加了基于的控件识别的游戏自动化测试框架,(在这里主要用到了网易的 airtest 框架,不得不说这是一个十分强大的测试框架)

但是对于开发初期的项目,由于临时数据、临时资源等问题,如果也使用图像识别或者控件识别,会因为 UI 的变化或者 xpath 的变化,可能会产生较大的维护工作量,个人的认为初期的游戏更适合做接口测试(如果开放接口的话)或者以人工黑盒测试为主,以保证功能可用性为主。

趋势
现在国内业界有 2 个巨头一个是腾讯,一个是网页。腾讯的了解不多,腾讯 GAutomator 框架和网易的 Airtest 框架相比,后者可能更加友好一些,对初学者比较容易入手。未来游戏自动化测试的趋势,我猜测会是以下的模式:UI 发展到控件识别再到内存,最后的内存应该相当于外挂了。项目会不会开放重要的 API 给测试人员?如果团队中有会安全、逆向的测试人员,而这款游戏又很叫座,员工离职,必然给项目带来安全隐患。所以就靠员工自己破解游戏进行内存操作实现自动化了。

总结(纯属吐槽)
这里不说技术上遇到的问题,说说项目上的。我觉得项目上的领导有些小河蟹,“来,这个功能给加下自动化测试”,不管你能不能实现,适不适合自动化实现,就让你做,感觉都是大爷。
“我看他的项目可以做自动化测试,那我和他的游戏类型一样,肯定也可以做,来也帮我搞一套自动化框架出来”。搞一套这个问题不大,问题大的是,不提供支持,要点资源支持,贼鸡儿难。
项目希望的是我们是家政保洁,帮他把 “家务活” 都做好,甚至不管你有没有进入 “房间” 的权限,就想着你们帮大爷都做完做好就行,找他要 “钥匙” 进房间的时候会说 “尼玛,这还要钥匙?” 最怕遇到这种大河蟹。

顺便我想问,有哪些游戏公司也在做游戏 UI 自动化测试,基于图像识别的,或者有意向做的?

共收到 25 条回复 时间 点赞

然而,你们是怎么做的,实现了么

自动化测试不是解决 100% 的测试覆盖,随着需求的增加总会出现 bug。自动化测试是有限集合的测试覆盖,自动化测试要做到的是出现过的 bug 不再出现。

拿来跑冒烟特别爽

gzhtest 回复

cv 图像识别匹配出坐标,然后模拟人工点击

0x88 回复

有道理,学到了,我们也是这么做的,出现过的 bug 及时覆盖

codeskyblue 回复

我们做的更多的是回归测试

就算 UI 经常变化,也有的是办法,你需要的只是,快速更换原有截图的办法。所以游戏不稳定也没关系了

codeskyblue 回复

截图快速更换这个问题通过工具可以解决,但是功能更新或者 UI 变化往往也会带来操作逻辑的变化,这个时候除了改图片,脚本点击逻辑也要维护

IAmTester 回复

这个感觉还需要个运行选中代码的功能,防止从头开始调试

以前在游戏发行公司做过,但只保障 sdk(账号,支付),基于 ATX 的实践,也分享过相关的文章

12楼 已删除
13楼 已删除

你测试群群号啥呀

codeskyblue 回复

TesterHome 游戏测试群 : 581529846

已加,通过下

仅楼主可见

你好,我想学习游戏的自动化测试,目前在学习 python。 我想问下要做游戏的自动化测试都需要学习什么呢 (学习完 Python 之后)?

啊,楼主如果参加了今年的 MTSC 大会,应该就知道自动化在鹅厂已经做到了什么地步了。。
内存什么的对他们来说已经是信手拈来了。
参加了这次大会,才了解大厂是如何做自动化的。但也意识到,这也只能是在大厂了。。

感谢楼主分享这么多。
这次大会上,行业一致认为,自动化只适合做回归测试,虽然鹅厂大佬已经开始做自动化探索测试,但目前来说似乎并没有特别好的实践。

我们公司在做,也是用 airtest,我想问下冒烟自动化到底做 UI 自动化比较好,还是接口自动化?

我们公司。

楼主 我们项目是一个用白鹭引擎开发的一个 2d 的 h5 游戏,这种的话如果想做自动化来实现自动化跑新手流程 用哪种方式会好点呢?

kaitao-chen 回复

airtest 有一个可以实现内嵌 poco-sdk 的自动化测试方案,可以试下 egret 内嵌这个 SDK,个人觉得可以 poco-sdk+ 图片识别共同实现

楼主公司目前的自动化程度怎样了?

scarecrow 回复

我也想,你学完 python 了么

自动化是用于回归测试,保证以前出现过的 bug 不在出现

我们公司正好在做,有兴趣一起交流下~

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册