针对游戏的自动化方案国内有两个很流行的框架——GAutomator 和 Airtest。这两个框架各有优缺点。基于各种利弊权衡和优劣比较,我在项目中还是果断采用了 GAutomator 的方案。
GAutomator 的自动化方案很大程度上依赖于它嵌入游戏的 sdk,不过性能非常好。但是脚本有很多功能,比如 remote 模式,uiautomation,等都不是我们需要的。而且每次启动脚本,都要等将近 10 秒或者更久才能跑到真正的自动化逻辑,感觉挺烦。为此做了一些简化,也方便接下一个项目的时候可以直接用到简化之后的模板。
简化的 GAutomatorAndroid 删除了对 python 2.7 的支持(是的,都这个时候还用 python 2.7,有点过分了),删除了 remote 的支持,删除了 uiautomation 的初始化部分,简化的日志模块的初始化,修改了 Device 类的功能,添加了 minicap 的截图方式,增删了一些命令参数,等等。。。
GAutomator 的运行需要获悉游戏的控件全路径,你可以在 Unity 引擎中查看。GAutomator 提供了一个叫 GAutomatorView 的工具去获取控件路径,非常方便。但是实测的时候发现两个问题,一个多设备下 GAutomatorView 永远拿到的都是第一个设备的控件树和截图,即使你在设备下拉列表中选了其他设备序列号,第二个问题是有某种环境下,GAutomatorView 会获取不到控件树。我怀疑是因为场景控件太复杂,获取控件树本身就很耗时,而 GAutomatorView 内部的 socket 写死了超时时间,于是导致总是超时,总是获取不到控件树。
这个工具腾讯一直不开源,无奈之下五一期间抽空用 javaFX 做了一版。新添加了当控件树选中项改变的时候,自动将控件的全路径复制到剪贴板的功能,这样你就不用每次都去 Ctrl + C 了。
这个工具还是很粗糙,会抽空新加一些新功能,比如类似腾讯 PerfDog 采集性能制作图表之类的。但鄙人能力实在捉襟见肘,还是希望各位都能一起帮忙: