Airtest的前世今生

摘自《网易游戏学院 质量保障》 出版时间2020年
——6.2 自动化测试方案Airtest介绍

Airtest框架介绍

我们在2014年开始做自动化测试的时候,看到了MIT研究人员公布的论文,讲的是一种新的图形脚本语言Sikuli。在Sikuli中,开发人员想要使用其他界面的元素,或者调用其他程序是不需要输入代码的,而是只要在代码处插入相应的按钮或图标截图。

Why Sikuli?

Sikuli automates anything you see on the screen. It uses image recognition to identify and control GUl components. It is useful when there is no easy access to a GUI's internal or source code.

这是一种理论革新,它直接以可视化的图形,而不再是以内存中的对象来作为调用单位,完全颠覆了以往的开发方式。

接触了这样一种思想之后,我们觉得非常惊艳,但是同时又认为Sikuli更像是一个研究成果,暂时还不能够成熟地应用在生产环境中。于是我们借鉴了它的思想,在我们自己的Airtest项目中尝试落地,并做了更多的事情。

首先我们做了一层硬件抽象层的封装,将Android/Windows/iOS等操作系统封装成了一套统一的API,这样我们就可以轻松地获取到被测应用的截图,对目标进行图像识别,然后进行模拟操作。

图像识别技术主要采用了OpenCV中的模板匹配和SIFT特征值匹配。其中模板匹配对于分辨率相同的图片匹配效果非常完美,但是由于手机分辨率各不相同,我们需要采用SIFT特征值匹配来解决这个问题。

SIFT特征值具有的尺度不变性和旋转不变性满足了这个要求,但是运行效率和识别率都不够。于是我们进一步研究了常用游戏引擎的UI适配规则,内置了Cocos引擎的适配规则,同时暴露了API让游戏开发者明确指定自己游戏的分辨率适配算法。

这样就完美解决了图像识别的问题。实际上我们为公司内项目编写的脚本,可以运行在200种不同型号的手机上,甚至可以在电脑版客户端上运行。

Poco框架介绍与实现原理

Poco的原理是参考了安卓测试框架UIAutomator和Web测试框架Selenium,先获取到整个UI系统的树状结构,然后递归查找到需要操作的UI控件,再调用引擎或者设备接口进行模拟操作。

但是这些都不是针对游戏的测试框架,具体到游戏自动化测试上,问题就复杂很多。因为游戏引擎各异,除了流行的商业引擎Unity、Cocos等,还有各家公司自研的引擎,网易内部就有2款成熟的引擎。所以我们设计了一套通用的SDK,每个引擎只需按接口实现SDK即可。

我们的SDK在游戏内启动了一个RpcServer,外部的Python测试框架通过JSONRPC调用SDK的方法抓取游戏的控件树。再通过AirtestIDE显示整个UI层次结构,通过模拟输入进行自动化操作。

我们逐步支持了网易内部的各个引擎,也包括了Unity和Cocos,同时我们提供了多语言的SDK给其他公司开发者,他们可以自行扩展到他们的自研引擎,这样我们就解决了游戏跨引擎的UI自动化问题。

Airtest项目的特点和技术优势

游戏测试行业面临的最大问题,如前文所述,由于游戏引擎不统一,整套工具链都不统一,而且引擎方支持较少,需要开发者自行解决,这样就使得不同引擎开发出来的游戏不能以通用的方案去做测试,带来了很多资源和技术上的问题。

另一个方面,对比Android/iOS/Web开发,整个游戏行业的工具链和开发理念都落后很多,更别提生态环境了。Unity、Cocos的出现和流行解决了部分这类问题,但是愿意投入人力和技术资源来解决这类问题的公司不多。

对于游戏项目来说,通常开发进度超快,短时间大量迭代,所以代码和接口不够稳定,很难做自动化。于是我们只能从最上层UI层来做自动化。这就是Airtest Proiect整个项目诞生的初衷,我们希望能够用尽可能低的成本,来实现高效便捷的自动化测试。

经过长时间的探索和尝试,我们提供的Airtest Project相比于业内其他工具,有着非常巨大的优势:
(1)跨平台、跨引擎:支持Windows/Android/ios,支持Unity3d/Cocos2dx,同时可以扩展其他引擎。
(2)上手门槛低、上限足够高:可视化编程,0上手门槛,同时可以结合整个Python的工具链进行持续集成。
(3)灵活扩展、可规模化:我们基于Airtest技术实现了大规模测试平台TestLab,可以将脚本同时运行在上百台手机上。
(4)经过验证、有大量的最佳实践:在网易游戏内部,自动化技术已经应用在《梦幻西游》《大话西游》《阴阳师》等数十个产品,上千个自动化脚本累计运行上万小时。

合作与开源

与Google的合作

Airtest之前是我们的内部工具,在内部开发和使用了3年,《梦幻西游》《大话西游》《阴阳师》《荒野行动》等大型游戏都在使用。

开源这个事的契机最初是我在2017年5月去硅谷参加Google IO大会时,来到他们的Firebase Test Lab的展台,与Google的开发者进行交流。当时我向他们介绍了我们公司这一套内部自动化解决方案,并邀请他们过来广州参观,他们对此非常感兴趣。

后来的几个月里我们与Google方面一直保持密切的交流,他们也多次来广州参观,并评价我们是最好的游戏自动化方案。于是我们达成了合作,将这个技术进行了完善和开源。

在与Google合作期间,我们双方每周都有视频会议,在Airtest项目的产品设计和技术上进行沟通。Google也在Google Firebase Test Lab上支持Airtest和Poco框架。除此之外,Google还给了我们很多开源方面的建议。

人工智能

关于人工智能我们在GDC有过分享,我们和Google合作的部分结合了人工智能尝试改进图像匹配算法。目前做到的程度是用Object Detection来取代单纯的图像匹配,这样对于3D对象效果更好,即使3D对象转向或被遮挡也能有较好的识别率。

另外我们还在积极地做一些尝试,比如用人工智能技术做一个智能爬虫抓取游戏内的所有界面进行比对。再下一步就是真正带智能地来玩游戏,这个可能要等DeepMind团队先把星际争霸玩好了。

关于人工智能在游戏行业和测试行业的应用,我是非常看好的,未来也希望能够用它让我们的Airtest变得更加强大。

未来与展望

游戏领域的自动化测试是我们最擅长的,所以我们会争取做到最好。目前我们在国内的相关社区非常活跃,有大量的用户反馈,我们会持续优化和完善。

我们发布时也支持了Android源生App的测试,而且反馈也不错,这块准备深挖一下。

接下来我们的主要开发计划是扩展支持更多的平台,支持所有端的自动化测试。我们在2018年5月已经发布了对iOS和Web的支持,未来会抓紧支持Hybrid/VR等其他平台。

更重要的一点是,我们希望能把整个自动化测试的开源社区建立起来,有兴趣的同学可以访问我们的官网(http:/airtest.netease.com/)获得更多信息以及我们团队的联系方式,可以与我们一起交流技术,把开源事业做好。

 

---------------------------------------------------------------------------------

关注微信公众号即可在手机上查阅,并可接收更多测试分享~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章