Airtest Project 是网易开发的一款跨平台 UI 自动化测试框架( http://airtest.netease.com )。通过阅读该框架的整体介绍和使用说明,总结框架的基本功能和特点如下,对 Android,iOS,3D 游戏等应用的 UI 自动化测试感兴趣的读者请务必看过来
跨平台
Airtest Project 一大特色是跨平台,支持以下应用的 UI 自动化测试
- Android app
- iOS app
- Windows 应用
- Web 应用
- 微信小程序应用 ( 仅支持系统内核,TBS 内核尚在开发中,http://airtest.netease.com/blog/tutorial/WechatSmallProgram/ )
在游戏应用方面,支持以下引擎开发的 app
- Unity3d
- cocos2dx-js
- cocos2dx-lua
运行环境
Airtest Project 提供一套能够编写,录制,回放脚本的编辑器 AirtestIDE,目前该 IDE 已提供如下操作系统的客户端
- Mac
- Windows
- Linux Ubuntu
脚本编写语言
测试脚本编写语言为 Python,兼容 Python 2.7 和 Python 3
核心模块
1. Poco 用于控件识别
https://github.com/AirtestProject/Poco
Poco 框架用于对 Unity3D,cocos2dx-*,Android 原生 app,iOS 原生 app 的控件树进行解析查找,来定位 UI
例如对 Android 原生 app 的 控件定位
2. Airtest 用于图像识别
https://github.com/AirtestProject/Airtest
Airtest 框架用于对 Android,iOS,Windows,Unity,Cocos2dx,微信小程序应用界面的图像进行识别,实现界面查找及定位
例如对 app 中某个图像进行定位或查找
3. 自定义
http://airtest.netease.com/docs/en/1_online_help/advanced_features.html
Airtest Project 可根据需要扩展录制的功能,例如
- 设置脚本执行中的自定义参数
- 添加自定义功能,或替换默认功能
- 在脚本运行前,过程中或运行结束后执行类似 setUp, tearDown 的操作
与设备进行连接
在 AirtestIDE 中针对 Android 设备的连接比较容易,通过开启设备的 USB 调试即可快速连接
但针对 iOS 设备的连接需要进行一些配置,下面针对 iPhone 进行
- iOS-Tagent
git clone https://github.com/AirtestProject/iOS-Tagent.git
启动 WebDriverAgent.xcodeproj 时注意按照下面的步骤设置一下开发者,官方的配置没有介绍这一点,未配置的情况下会导致 build failed
Step 1: 修改 Bundle identifier
将下图第 4 步的值修改为跟原值不一样,例如我这里在开头加了一个 my.
Step 2: 修改 Team
在 Step 1 的基础上,设置本地的 Apple ID (如果没有配置的话需要自行先添加下)
Step 3: 修改 info Bundle identifier
将以下图中第 2 步的值改为与 Step 1 中完全一致
经过以上配置的修改,再执行 Xcode 的 Product - Test 就能编译成功
如果经过以上操作仍然不成功,则参考我之前的文章:appium v1.15.1 在 iOS 真机的环境配置。关于 WebDriverAgent 依赖的第三方库较多,在 appium 中也有应用到,我在此文中有更详细的介绍
另外,如果运行起来之后遇到如下报错 Test Failed,根据提示在通用-设备管理中对 Apple Development 进行信任操作
WebDriverAgent 启动成功后 output 输出类似下面的内容
2. 配置端口映射
安装代理:
$ brew install libimobiledevice
映射端口:
$ iproxy 8100 8100
3. 运行 Mac 端浏览器查看 iPhone 界面
http://127.0.0.1:8100/inspector
写在后面
Airtest Project 从平台覆盖面上看非常强大,得益于图像方式的控件识别,能够更好的应用在游戏及无法使用控件方式定位 UI 的场景
另外,由于使用 python 编写脚本,能支持更多的第三方库,所以其扩展性较强,适合针对特定的需求自主开发脚本内容
同时对测试人员非常友好,脚本录制操作方便快捷,对于不会 python 编写代码的读者来说也能实现自动化 UI 测试