post on 22 Dec 2019 about 5353words require 18min
CC BY 4.0 (除特别声明或转载文章外)
如果这篇博客帮助到你,可以请我喝一杯咖啡~
此为网易游戏在中山大学计算机科学与技术专业 2019~2020 学年第一学期开设的选修课程《移动互联网编程实践》作业。
Airtest 脚本开源地址:https://github.com/wu-kan/FGO-AirTester.air
Airtest 运行报告地址:https://wu-kan.github.io/FGO-AirTester.air/log.html
PerfDog 性能数据地址:https://perfdog.qq.com/case_detail/336356,Password: KBKmyX
完整测试视频地址:https://www.bilibili.com/video/av80128598/
游戏的性能测试
选择一款你喜欢的游戏,设计一段性能测试用例并执行测试,给出分析报告。
Fate Grand Order,国服版本号为 v1.55.244193。下述介绍截取自游戏官网。
Fate 系列首款正版手游,100 万字剧情描绘史上最大圣杯战争!《FGO》剧情原案由 Fate 之父奈须蘑菇亲自执笔,长达 100 万字的小说级故事线将为您揭露多重背景设定!
史上最多英灵集结,跨越时代的终极召唤!在《FGO》中可召唤的从者包含了《Fate/Zero》、《Fate/stay night》等多部知名 Fate 作品中的经典角色,以及多位《FGO》首创英灵与您展开命运的羁绊,更有全新职阶首次于 Fate 系列中登场!
指令卡式战斗,原汁原味的日式 RPG!在《FGO》中,战斗通过对从者下达的命令用指令卡来表现,通过回合制的形式展开指令战斗。战斗分为战术阶段与指令阶段,根据您的选择,从者会分别发动攻击。己方攻击后,转为敌方行动。敌方行动后一回合结束。
50 多位知名画师参与英灵绘制,40 位以上声优倾情献声!《FGO》力邀武内崇在内的 50 余位知名画师组成超豪华美术团队,更特邀 Fate 系列原班声优参与配音!
Airtest 是由网易开源的一款基于 OpenCV 的跨平台的 UI 自动化框架,适用于游戏和 App。下述介绍来自于其 GitHub 上的开源仓库。
- 各种运行:Airtest 提供了跨平台的 API,包括安装应用、模拟输入、断言等。 基于图像识别技术定位 UI 元素,你无需嵌入任何代码即可进行自动化。
- 扩展性:Airtest 提供了命令行和 python 接口,可以很容易地在大规模设备集群上运行。自动生成的 HTML 报告,包含详细步骤和录屏,让你迅速定位失败点。
- AirtestIDE: 是一个强大的 GUI 工具,可以帮助你录制和调试自动化脚本。 AirtestIDE 支持了完整的自动化流程:录制脚本->真机回放->生成报告。
- Poco: Poco 框架可以直接访问 UI 控件,支持主流平台和游戏引擎。通过 Python API 操作 UI 控件,可以实现更强大的自动化控制。
这里是官方教程。
腾讯 WeTest 明星工具 PerfDog 在 2019 年 11 月正式对外发布(非常新的工具喔)。PerfDog 作为一款性能测试和分析工具,支持全平台的应用形态测试,包括 Android、iOS、小游戏、小程序、H5 等。且 Android 设备无需 ROOT,iOS 设备也无需越狱,能非常高效地解决两大系统测试分析的难题,提高测试工作的效率。
这里是官方教程。
虽然是今年春季发布的新机器,但是配置非常之低,索尼大法诚不坑我…不过,卡牌类游戏对设备要求低,玩家 Android 多低端设备多样性带来设备适配问题,因此使用这台手机(就不仅是因为穷)所得到的测试结果也十分有参考意义。
我针对 FGO 的 QP(打开宝物库之门)副本设计了一个自动化脚本。详细的脚本内容和完整测试视频已经放在开头的链接里,可自行查看。
下图是我使用的队伍编制。由于自动化测试过程中我希望尽量避免考虑额外的情况,因此没有使用热门的双 CBA+狂兰/伯爵的配置(依赖好友助战)。这个配置的方便之处在于,三轮战斗都只要靠丢技能和宝具就可以过关,不依赖于指令卡、助战和 Master 技能。
下面是一个完整的测试的流程图,这样安排技能和宝具的顺序可以最大化输出。
flowchart TB
N([进入游戏])-.手动.->L
L--体力足够-->Y[选择助战]
L--体力不足-->M[吃苹果]
M-->Y
Y-->Z[确认战斗编制]
Z-->A[艾蕾2技能]
subgraph 第1轮
A-->B[艾蕾3技能]
B-->C[弓凛1技能]
C-->D[艾蕾宝具]
end
subgraph 第2轮
D-->E[小莫1技能]
E-->F[小莫3技能]
F-->G[弓凛3技能]
G-->H[小莫宝具]
end
subgraph 第3轮
H-->I[弓凛2技能]
I-->J[弓凛宝具]
end
J-->K[奖励结算]
K-->L[副本选择页]
使用的 PerfDog 工具在 Android 平台下,支持对以下数据的收集:
由于(2019-12-21 晚上八点半左右)打开游戏的时候游戏有一个更新,因此采集到的数据前 5 分钟是没有在运行自动化测试的,实际上自动化测试运行了大约二十分钟。
此处为游戏的帧率数据,可以看到帧率在 11~30 之间抖动。由于帧率的数据比较密集,我们结合下面 CPU 的数据进行分析。
可以发现在游戏运行的过程中 CPU 占用大致在 50%左右,但是偶尔会有几处占用会飙升。我们结合之前帧率的数据,进行分析。
选择一个比较有代表性的时间点。在 13:10,即自动化测试开始运行到第 8 分钟的时候,CPU 占用有一个高峰点,对应时刻的帧率下降、抖动的也比较厉害。让我们打开自动化脚本的运行日志,检查一下。
和预期的一致,此处在运行的是艾蕾的宝具动画。由于 FGO 虽然是一款 2D 卡牌游戏,但是他的宝具动画实际上是使用 3D 渲染的(真·纸片人),因此在运行宝具动画的瞬间对计算性能的压力是比其他状态下要高的。
此处为游戏的内存占用数据。可以看到,游戏在主界面的内存占用大概在 600M 上下,进入副本后的占用会升到 700M。
由于使用的工具不支持对我的手机的 GPU 运行数据的收集,这里没有 GPU 的数据。
此处为游戏运行时候的网络占用情况。可以看到,除了刚开始打开游戏时候的一波更新占用了一些流量外,卡牌类游戏在运行的时候其实是不怎么吃流量的,游戏大部分的工作都是在本地客户端渲染完成。
由于手机是通过 USB 调试连接到我的笔记本上的,因此实际上是一直在充电的,电量消耗情况没有参考意义。不过,就事论事,PerfDog 这个工具本身是支持 wifi 下远程数据收集的,只是 Airtest 工具限制了我需要用 USB 连上笔记本。
被这个问题卡住了很久,后来发现网易的 Airtest 支持调整 ADB 连接模式,我调整成「Use javacap」之后就没问题了。
一开始我的解决方法是sleep()
足够长的一段时间。(好蠢)
后来看了官方的文档,使用了touch(wait(v,timeout))
的方法,这样就可以等待界面元素出现之后点击了。
我是使用 OpenCV 的图像匹配来定位界面元素位置的。然而,艾蕾和小莫的 2 个技能图标是完全一样的,因此对于她们的技能我需要手动定位到准确的坐标值上。
众所周知,枪凛艾蕾和弓凛是两个角色,但是她们长得非常像doushiwolaopo。在最开始的几次测试中,我遇到了 OpenCV 将她们的宝具卡和指令卡认错,导致自动化测试进入死循环的情况。比如在下面这个场景中,由于发牌员的恩赐同时有六张长得非常相似的指令卡出现,很容易导致匹配错误。
我的解决方法是:选择界面中识别性较高的部分进行图像匹配。比如这里我是选择了宝具文字部分。
根据体力是否足够,增加了一个是否吃苹果(体力恢复道具)的预判。
由于时间所限,我只实现了最基本的自动化测试脚本。事实上,只要时间允许,增加一些代码,我还想实现以下功能:
一开始我想做的改进方向只有一两条,但是真的写下来却发现越写越多…写到最后我是不是真的可以百分之百的让机器替我玩游戏了呢!laopohaishizijide
通过本次作业,我得以以一个游戏测试人员的角度重新看自己玩的游戏。一直以来,FGO 的界面卡顿就饱为玩家们所诟病,这一次的测试算是实锤验证了这一点。我觉得,这门课上学到的东西应用在自己的实践中的这段过程是非常有趣的,也确实让人学到了很多。
一个额外的收获是我以后刷 QP 岂不是都可以【手动狗头】…
总的来说,由于是自己正在玩的游戏,本次作业让我写的格外有动力!感谢这门课程给我的这次机会,也感谢网易和腾讯开发的非常好用的工具~
Related posts