Airtest从入门到掉坑30-39 (完结篇)

…………查看上一篇文章请点我…………

30、Airtest下的命令行

在Airtest的IDE运行脚本时,LOG窗口中会打印运行命令(命令行命令)

Airtest从入门到掉坑30-39 (完结篇)_第1张图片

当然可以在不开启IDE的情况下,在命令行中使用那条命令来启动测试脚本

"/Applications/AirtestIDE.app/Contents/MacOS/AirtestIDE" runner "/var/folders/yz/xs936j052fn3q3v9mjjbj6s80000gn/T/AirtestIDE/Scripts/untitled.air"  --device Android://127.0.0.1:5037/LGH870DS23a9e210 --log "/var/folders/yz/xs936j052fn3q3v9mjjbj6s80000gn/T/AirtestIDE/scripts/9e6da54b56ecfb47d5f95a23086b8507"

复制到终端下,网易牛x,团队牛x,好想去…………

 

31、保存的Airtest脚本,在mac下发现是个.air的目录撒

 

32、请注意一个 .air 脚本中不要包含太多内容,用良好的脚本命名和目录结构来组织你的脚本,覆盖所有测试点,吹牛呢

 

33、你还可以在不同电脑上针对不同设备运行测试, 这时候你就需要使用 用命令行运行 .air 脚本

对于多平台发布的产品,灵活使用跨平台API和命令行,还可以让同一套测试脚本运行在Android和Windows上进行测试

 

34、看看网易是怎么吹牛b的

在网易游戏内部,我们的大型游戏通常会有数百个测试脚本,覆盖常用的玩法测试。 每周,这数百个脚本会分别运行在200台手机上进行兼容性测试

 

35、遇到Airtest的bug,我保存了脚本,结果不能用了,全部提示找不见

airtest.aircv.error.FileNotExistError: File not exist: tpl1545648737895.png

 

36、https://www.cnblogs.com/xieqiankun/p/use_airtest.html 我现在有个需求,就是查看布局,卧槽,原有的uiautomatorviewer,已经在JDK10上不好使,Layout  Inspector缺点是需要dubug包,且不稳定,老识别不出来,牛逼,用Poco Assistant即可,它需要你安装几个apk(RotationWatcher、PocoService、com.netease.open.pocoservice.test、Yosemite)到手机上,看来是要起进程了

Airtest从入门到掉坑30-39 (完结篇)_第2张图片

满足我布局查看的需求了,欧耶,牛逼

 

37、有坑啊,Poco Assistant,重新连接手机不好使了,悲催…………

 

38、解放人力提高准确率效率(AirTest还是主要应用于回归测试)

 

39、整个项目叫做 Airtest Project,在这个项目下边有两个底层的测试框架,分别是:

  • Airtest:基于设备层模拟输入和图像识别的测试框架
  • Poco:基于游戏引擎 UI 控件检索的测试框架

然后是可视化的自动化测试编辑器 Airtest IDE 和公司内部暂未开源的大规模真机测试平台 Testlab

总体上看,就是测试框架—可视化工具——云测试平台这样的一套系统

 

OSC:我们为什么需要做游戏自动化测试?

  • 安卓手机的碎片化问题非常严重,上线前要测试200款型号的手机,人工来做兼容性测试非常痛苦,缺点是:容易出错,耗时长,自动化在这里的作用几就会非常明显
  • 游戏或大型应用的迭代更新快,如何保证每周更新不会影响已有的内容(功能),就需要用Ui自动化的方式进行回归测试。现状:通常我们的一个大型游戏每周更新前会运行数十个小时的自动化测试,如果不用自动化,那根本跟不上

自动化价值:解放人力提高准确率、提高效率

 

OSC:来讲讲技术上的东西,Poco 的实现原理是怎样的?

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

但是这些都不是针对游戏的测试框架,具体到游戏自动化测试上,问题就复杂很多。

游戏引擎各异,除了流行的商业引擎 Unity、Cocos 等,还有各家公司自研的引擎,网易内部就有2款成熟的引擎。解决方案:所以我们设计了一套通用的 SDK,每个引擎只需按接口实现 SDK 即可。

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

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

 

OSC:Airtest 框架运用了图像识别技术,具体实现是怎么样的呢?

在14年看到MIT公布的论文,讲的是一种新的图形脚本语言 Sikuli ,开发人员想要使用其它界面的元素,或者调用其它程序是不需要输入代码的,而是只要在代码处插入相应的按钮或图标的截图,截图的思想来了

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

接触了这样一种思想之后,惊艳的同时又认为 Sikuli 更像是一个研究成果,暂时还不能够成熟地应用在生产环境中。

我们自己的 Airtest 项目就可以来做一次落地啊,于是借鉴了Sikuli的思想,并做了更多的事情

首先是一层硬件抽象层的封装(为了获取截图),将 Android/Windows/iOS 等操作系统封装成了一套统一的 API,这样我们可以轻松地获取【截图】,对目标首先进行【图像识别】,然后再进行【模拟操作】

 

图像识别技术主要采用了【OpenCV】中的模板匹配和 SIFT 特征值匹配。

其中模板匹配对于分辨率相同的输入效果非常完美,但是由于手机分辨率各不相同,我们需要采用 SIFT 特征值匹配来解决这个问题(模版匹配有坑,用SIFT来填坑)

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

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

 

OSC:目前游戏测试行业面临的具体问题有哪些?业内都有哪些相应的解决方案?

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

另一个方面,对比 Android/iOS/Web 开发,整个游戏行业的工具链和开发理念都落后很多,更别提生态环境了。Unity/Cocos 的出现和流行解决了部分这类问题,但是愿意投入人力和技术资源来解决这类问题的公司不多。网易游戏在这块已经算做得不错了,我们整个团队15人,技术能力很强,就是专门在做游戏自动化和游戏开发中的持续集成(网易你们牛逼)

 

OSC:Airtest 整个解决方案其实就是为了达到“自动化”,这也是软件测试行业一直以来的追求,那么关于如何去做自动化测试,行业内其它解决方案是怎么样的?人工智能在这里边势头好吗?

软件测试的自动化一般分为3层:

  • 代码层的单元测试(单元测试自动化)
  • 接口层的集成测试 (接口测试自动化)
  • UI 层的测试(Ui自动化)

前两层在软件行业已经有一些比较好的实践,特别是那些大型的稳定项目(看来大型App适合做单元测试、接口自动化测试)

但是对于游戏(App)项目来说,通常开发进度超快,短时间内大量迭代,所以代码和接口都不够稳定,很难做成单元自动化、接口自动化。于是我们只能从最上层 的UI 层来做自动化。这里当然也存在 UI 迭代的问题,所以我们尽量想降低UI自动化的成本,这也是 Airtest IDE 产生的初衷(网易牛逼)

业内常规的 UI 自动化方案,比较典型的有两种:

  • Android 的测试框架 UIAutomator /Espresso,利用 Android 系统的控件结构来做自动化,通常是测试代码直接在安卓手机上运行。但是仅限于 Android,而且需要有 Android的开发经验,对技术水平要求较高。
  • Selenium 和 Appium,被测应用通过 webdriver 协议与外部工具通信,再进行自动化测试。目前这套方案协议层做得不错,覆盖大部分的端,但是外部工具门槛较高,也不适合普通测试人员使用。

目前做到的程度是用 Object Detection 来取代单纯的图像匹配,这样对于3D对象效果更好,即使3D对象转向或被遮挡也能有较好的识别率。

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

人工智能在游戏行业和测试行业的应用,非常看好。

 

OSC:请简单总结一下,对比同类项目,在技术上,Airtest 项目的特点是什么?优势是什么?

对比的话,其实前边也大致讲到了,这里简单说一下 Airtest 的特点与优势:

  • 跨平台、跨引擎:支持 Windows/Android/(iOS即将到来),支持 Unity3d/Cocos2dx,同时可以扩展其它引擎
  • 上手门槛低、上限足够高:可视化编程,0上手门槛,同时可以结合整个 Python 的工具链进行持续集成
  • 灵活扩展、可规模化:比如基于 Airtest 技术实现了大规模测试平台:http://airtest.netease.com/testlab.html
  • 经过验证、有大量的最佳实践:在网易游戏内部,自动化技术已经应用在梦幻西游、大话西游、阴阳师等数十个产品,上千个自动化脚本累计运行上万小时

 

OSC:Google 在该项目中的参与情况具体是怎么样的?

开发周期:内部开发和使用了3年,梦幻西游、大话西游、阴阳师、荒野行动等大型游戏都在使用

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

得到认可:后来几个月我们一直保持交流,他们也过来了几波人参观,Goolge评价我们这是最好的游戏自动化方案,然后我们决定合作把这个技术开源出去

持续合作:之后我们也一直保持着联系,每周有视频会议(牛逼),在 Airtest 项目的产品设计和技术上进行沟通。谷歌也在 Google Firebase Test Lab 上支持 Airtest 和 Poco 框架。除此之外,Google 还给了我们很多开源方面的建议。

 

OSC:请介绍一下该项目接下来的计划

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

我们发布时也支持了 Android 原生App的测试,而且反馈也不错,这块准备深挖一下,普通应用也要开始深挖了,不抛弃不放弃

接下来我们的主要开发计划是扩展支持更多的平台(操作系统),支持所有端的自动化测试,最重要的是 iOS,后面还有 Web/Hybrid/VR 等等

从3月 GDC 发布以来,我们开发团队一直在持续开发,可以预告一下 iOS 和 Web 端支持即将在未来几周到来

更重要的一点是,我们希望能把整个自动化测试的开源社区建立起来,有兴趣的同学可以通过以下邮箱联系我们,一起交流技术,把开源事业做好

 

精简版本:

14年开始做自动化, MIT 研究公布论文,讲的是图形脚本语言 Sikuli ,在 Sikuli 中,开发人员想要使用其它界面的元素,或者调用其它程序是不需要输入代码的,而是只要在代码处插入相应的按钮或图标截图

做了一层硬件抽象层的封装,将 Android/Windows/iOS 等操作系统封装成了一套统一的 API,获取截图,对目标截图进行图像识别,再进行模拟操作

图像识别技术主要采用了 OpenCV 中的模板匹配和 SIFT 特征值匹配

整个团队15人,技术能力牛逼,专门在做游戏自动化和游戏开发中的持续集成

软件测试的自动化一般分为3层:

  • 代码层的单元测试
  • 接口层的集成测试
  • UI 层的测试

业内常规的 UI 自动化方案,有两种:

  • Android 的测试框架 UIAutomator /Espresso,利用 Android 系统的控件结构来做自动化,通常是测试代码直接在安卓手机上运行。但是仅限于 Android,而且需要有 Android 开发经验,对技术水平要求较高。(官方原生)
  • Selenium 和 Appium,被测应用通过 webdriver 协议与外部工具通信,再进行自动化测试。目前这套方案协议层做得不错,覆盖大部分的端,但是外部工具门槛较高,也不适合测试人员使用。(第三方框架)

当前:人工智能技术做了一个智能爬虫抓取游戏内的所有界面进行比对

趋势:再下一步就是真正带智能地来玩游戏,这个可能要等 DeepMind 团队先把星际争霸玩好了

大趋势:人工智能在游戏行业和测试行业的应用,我是非常看好的

 

40、https://www.jianshu.com/p/6bf26d1192b4 这篇讲解poco

 

注意:请一定要参考官网的教程,本系列入门文章结束了,其实只是我的当初体验的记录…………仅供参考…………

 

参考文章

https://www.oschina.net/question/3820517_2278684?nocache=1524704966955

https://www.jianshu.com/p/32d08455e86f 关于Airtest的使用探索

http://airtest.netease.com/docs/docs_AirtestIDE-zh_CN/3_record_script/2_poco_assistant.html Poco 是一种 基于UI识别 的测试框架。AirtestIDE对Poco框架进行了使用支持,提供了UI查看、脚本自动录制等辅助功能

https://www.cnblogs.com/xieqiankun/p/use_airtest.html 全面超越Appium,使用Airtest超快速开发App爬虫(卧槽这篇文章讲的也太细致了吧)

https://blog.csdn.net/saint_228/article/details/89638300 遍历pocoUI树的效率

 

你可能感兴趣的:(开发工具)