AirtestProject项目简介
Airtest Project是一款由网易研发并开源的自动化测试框架,相比于其他的自动化测试框架,主要有如下两个优势:
- 大幅度降低自动化脚本的编写和维护成本
Airtest Project希望能够通过一种所见即所得的方式完成脚本的录制,即使测试人员不会编程不懂脚本,也可以通过正常用户的点击拖拽等操作,自动完成脚本的录制,从而大幅度降低企业和项目的自动化维护成本。
- 解决游戏测试的痛点
Airtest Project希望能够通过对游戏的不同引擎做支持,成为一个真正意义上的跨引擎跨平台的自动化测试平台。
AirtestProject是由网易游戏推出的一款自动化测试框架,项目构成如下:
Airtest:是一个跨平台的、基于图像识别的UI自动化测试框架,适用于游戏和App,支持平台有Windows、Android和iOS,开码和有API文档。
Poco:是一款基于UI控件识别的自动化测试框架,目前支持Unity3D/cocos2dx-*/Android原生app/iOS原生app/微信小程序,也可以在其他引擎中自行接入poco-sdk来使用,开码和有API文档。
AirtestIDE:跨平台的UI自动化测试编辑器,内置了Airtest和Poco的相关插件功能,能够使用它快速简单地编写Airtest和Poco代码。
AirLab:真机自动化云测试平台,目前提供了TOP100手机兼容性测试、海外云真机兼容性测试等服务,请访问官网以了解更多。 私有化手机集群技术方案:从硬件到软件,提供了企业内部私有化手机集群的解决方案,欢迎了解。
可以看到,底层的主要测试框架主要是Airtest和Poco,二者的区别在于:
Airtest:基于Python的、跨平台的UI自动化测试框架,基于图像识别原理,适用于游戏和App。
Poco:基于UI控件搜索的自动化测试框架,其核心优势是除了对Android、iOS之外,对游戏也是支持的,同时也支持微信小程序、微信小游戏和H5应用。
支持平台
- Android
- iOS
- Windows
- Unity
- Cocos2dx
- 白鹭引擎
- 微信小程序
快速上手
对于新手,我们非常建议使用 AirtestIDE 来帮助你编写自动化测试脚本。熟练上手 Airtest 和 poco 以后,如果有需要的话,则可以尝试脱离IDE来跑测试脚本,比如在本地命令行上运行,比如在pycharm上运行等等。
Airtest官方文档:https://airtest.doc.io.netease.com/
AirtestIDE
AirtestIDE 是一个跨平台的UI自动化测试编辑器,它是专为以上两个自动化测试框架量身打造的。所以我们非常建议新手可以从 AirtestIDE 开始学习 Airtest 和 poco 。
AirtestIDE 安装
目前AirtestIDE提供了Windows和Mac两个版本的客户端,请从官网下载,解压即用。
官网下载地址:http://airtest.netease.com/
系统要求
- 操作系统
- Windows
- MacOS X
- Linux
- Python2.7 & Python3.3+
连接设备
无论是Android/iOS手机,还是Windows窗口,在Airtest中都将它视为一个设备,接下来我们将演示如何连接一个设备。
连接Android手机 通过ADB连接你的电脑和Android手机,即可开始调试Android应用。ADB是Google官方提供的Android调试工具。AirtestIDE依赖ADB与安卓设备进行通信。
打开AirtestIDE,按照以下步骤进行连接:
- 打开手机设置-开发者选项-USB调试开关,参考安卓官方文档
- 在AirtestIDE设备面板中点击refresh ADB按钮,查看连接上的设备
- 如果没有显示出设备,试试restart ADB,如果还不行,参考FAQ文档进行问题排查
- 能够成功看到设备后,点击对应设备的Connect按钮,进行初始化
手机连接成功后,即可在AirtestIDE中看到手机屏幕的镜像显示,并进行实时操作。
录制自动化脚本
一、基于图像识别
点击AirtestIDE左侧的Airtest辅助窗上的录制按钮,然后随着你在设备窗口上操作手机,代码会自动生成在代码窗口中。
支持以下常用API:
touch:点击输入
text: 文字输入
keyevent: 按键输入,包括(HOME/BACK/MENU等)
sleep: 等待
snapshot: 截屏
二、基于UI控件
如果你发现图像识别不够精确,还可以使用基于UI控件搜索的方式进行自动化测试,与刚才的Airtest不同,这是Poco这个框架实现的功能。
目前Poco直接支持Unity3d、Cocos2d、白鹭引擎等多种游戏引擎,以及Android/iOS原生App。
如果是Android/iOS原生应用,是即插即用的,无需接入SDK。但由于游戏引擎使用OpenGL等图形接口直接渲染,而没有使用Android原生的UI系统,我们需要与游戏的Runtime进行通信获取整个UI结构。
点击录制按钮,然后随着你的鼠标操作,会自动生成Poco语句到脚本编辑框中
对于Android/iOS的原生应用来说,不需要接入SDK即可使用,例如在连上Android手机后,将Poco辅助窗的模式切换至Android,能可以看到整个UI树形结构。
自动录制出的语句不一定能够适应所有场景,采用更合理的选择器编写代码,通常会增强整个自动化脚本的健壮性和可读性,这是门学问。
使用Python语法
整个AirtestIDE中录制和运行的代码都是基于Python语言。Python语法简洁而强大,第三库和工具也非常多。
对于老手,你可以在AirtestIDE中使用各种第三方库来使你的自动化脚本更加强大,通过添加PYTHONPATH设置,可以使用本地的python.exe来运行你的脚本。
除了辅助窗口里面提供的语句,更多的API文档,可以查看Airtest和Poco的仓库。
例子:使用这些API来编写一个自动化脚本,步骤如下:
- 通过ADB连接一台安卓手机
- 安装应用APK
- 运行应用并截图
- 模拟用户输入(点击、滑动、按键)
- 卸载应用
模拟输入,支持以下常用API:
- touch:点击
- swipe:滑动
- text:文本输入
- keyevent:按键输入,包括(HOME/BACK/MENU等)
- snapshot:截图
- wait:等待
声明断言,Airtest提供了以下断言方法:
- assert_exists:断言图片存在
- assert_not_exists:断言图片不存在
- assert_equal:断言相等
- assert_not_equa:断言不等
命令行接口
可以使用命令行接口将自动化测试与持续集成结合起来。
你可以在不开启IDE的情况下,在命令行中使用那条命令来启动测试脚本,例如: "D:迅雷下载AirtestIDEAirtestIDE" runner "D:AirtestIDE_2018-01-24_83untitled.air" --device Android://127.0.0.1:5037/F8UDU16409004135 --log "C:UsersgzliuxinAppDataLocalTempAirtestIDEscriptscdfc40e8c297b6ad88e09de64d8bafa3"
你还可以在不同电脑上针对不同设备运行测试, 这时候你就需要用命令行运行 .air 脚本 。 对于多平台发布的产品,灵活使用跨平台API和命令行,还可以让同一套测试脚本运行在Android和Windows上进行测试。
查看测试报告
脚本运行完毕后,点击查看报告按钮(快捷键Ctrl+L),会使用默认浏览器打开结果报告页面。报告中将展示出每一个步骤的内容和实际执行过程的截图、运行结果,方便查看步骤是否执行成功。
案例实操
完成过程请观看演示视频:
总结
Airtest特性回顾
跨平台: Airtest可以在几乎所有平台上执行游戏和App的自动化。
一次编写,随处运行: Airtest提供了跨平台的API,囊括了应用安装、模拟输入以及断言等。由于使用图像识别技术来定位UI元素,因此无需嵌入任何代码即可对游戏和应用进行自动化操作。
可扩展性: 通过使用Airtest提供的命令行与python API接口,可以很轻松地在大规模设备集群上运行脚本。提供的HTML报告包含了详细操作步骤和截屏,能够迅速定位到失败点。同时,网易也提供了 Airlab 云测试平台服务。
AirtestIDE: AirtestIDE是一个强大的GUI工具,可以帮助你录制和调试测试脚本。 AirtestIDE提供了完整的自动化工作流程支持:录制脚本->真机回放->生成报告。