以下统计了 9 款支持 UI 自动化的测试方案
以下统计了9款支持UI自动化的测试方案:
自动化测试方案 | iOS | Android | PC | 游戏 | CI | 测试报告 | 补充 | organization |
---|---|---|---|---|---|---|---|---|
Soloπ | ✘ | ✔ | ✘ | ✔ | ✘ | ✘ | 只能真机测Android 部分功能还未开放 | Alibaba Alipay |
Airtest | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | 适用游戏和App iOS需要部署iOS-Tagent 使用Poco需要将Poco-SDK接入到游戏中 | Netease |
Macaca | ✔ | ✔ | ✔ | ✘ | ✔ | ✔ | 配合UIRecorder录制功能 iOS需要XCTestWD iOS需要BundleID | Alibaba Alipay |
Appium | ✔ | ✔ | ✔ | ? | ✔ | ✔ | iOS依赖于WDA iOS需要BundleID | Sauce Labs |
ATX(AutomatorX) | ✔ | ✔ | ✘ | ✔ | ✔ | ✔ | 基于图像识别完成游戏的自动化 iOS依赖于WDA iOS需要BundleID ATX目前已经分成了两个项目 | Netease |
✔ | ✔ | ✔ | ? | - | - | 屏幕截图的方式 iOS端资料甚少 | MIT | |
✔ | ✔ | ✘ | ✔ | - | ✘ | 需要游戏集成GAutomatorSDK | Tencent | |
✔ | ✔ | ✘ | ? | ✔ | - | 停止维护 | Alibaba taobao | |
✔ | ✔ | ✘ | ? | ✔ | ✔ | 需要将MonkeyTalk Agent库集成到被测项目 | CloudMonkey |
颜色说明:
颜色 | 说明 |
---|---|
1 橙色 | 环境依赖, 非侵入式, iOS端部署一个项目,与本地Server端基于WebDriver协议通信,实现本地界面元素的展现 |
2 红色 | 侵入式, 需要被测项目集成 |
3 暗红 | 特殊 |
4 绿红 | 目前看好的自动化方案 |
舍弃原因:
序号 | 舍弃原因 |
---|---|
1 | 传统的编写测试脚本的方式 |
2 | 侵入式的实现方式 |
3 | iOS设备越狱 |
学习成本低:
Macaca && Appium
这其中,Macaca
以及Appium
都是支持多语言的,Appium
支持的最多,包含了Ruby``Python``Java``Js
OC
PHP
C#(.Net)
这些几乎所有主流的语言,Macaca
目前支持Js
Java
以及Python
,也能基本满足需要
iOS实现自动化最重要的部分:
- libimobiledevice (破解Mac OS上iTunes和iPhone通信的开源库)
- usbmuxd 通过 USB 通道测试 iOS 真机
- ideviceinstaller 部署App,获取手机上已安装App BundleID等信息
- WebDriverAgent (facebook根据WebDriver Server协议提供的一款iOS移动测试框架)
- WebDriver WebDriver是一个远程控制界面,可以对用户代理进行内省和控制。它提供了一种平台和语言中立的有线协议,作为进程外程序远程指示Web浏览器行为的一种方式。 提供了一组接口,用于发现和操作Web文档中的DOM元素并控制用户代理的行为。它主要是为了允许Web作者编写从单独的控制过程自动化用户代理的测试,但也可以以允许浏览器内脚本控制 - 可能是单独的 - 浏览器的方式使用。
iOS自动化辅助部分:
- App Inspector 浏览器端的移动设备 UI 查看器,使用树状态结构查看 UI 布局,自动生成 XPaths。
- XCTestWD(Macaca) 类似facebook wda的方式,在xcode中执行xcuitest时启动一个监听server,可通过外部发送命令来创建待测app对应session并启动app,同时也实现了dump tree 和依据xpath,id等来定位某个控件并操作这些控件
H5、微信小程序
✘ FAutoTest
FAutoTest 专业服务于微信 H5/小程序的UI自动化测试,提升测试效率与质量。
- 支持微信 H5页面,能识别常见 H5控件,能获取页面任意内容(常见的如文字、图片、链接等)
- 支持小程序内控件识别,操作,页面内容获取等
- 支持安卓 Native 页面组合操作使用
- 简单的 API 设计,较低的使用门槛
- 支持基础的性能测试监控
- 功能扩展性强,扩展门槛低
Android
- "一机多控": 在录制回放的场景中,我们先是在一台设备上记录了用户的操作,然后再在任意一台设备上实现操作的回放。如果把场景扩展到多台设备上,就可以实现通过一台设备操控多台设备,我们把这套功能称为“一机多控”。
- 通过 Soloπ 录制的用例会以 JSON 的形式存储起来,用例不仅可以向上述视频演示的一样在设备本地直接回放,还可以通过 Soloπ 的解析器将用例转换为 Appium、Macaca 等目前主流自动化测试框架的脚本,轻松打通云测平台。另外,得益于文本抓取和图像识别能力,Soloπ 还实现了在 Android 端录制一遍用例,生成的脚本能够同时在 Android、iOS 双端回放的能力
- 开源部分包含录制回放与性能测试工具,一机多控功能由于稳定性原因暂时还没有开源,其他很多功能也暂未实现,如脚本格式转换,脚本的保存导出导入也不是很方便,没有测试结果报告, case无法复用
✘ Macaca
✘ Sikulix
✘ Appium 分成Appium客户端、Appium服务端和设备端三个部分,支持多种语言编写测试用例
App的UI或者黑盒测试首选
✘ Airtest - 网易开源的UI自动化测试工具,适用于游戏和App
✘ ATX - 基于图像识别完成游戏的自动化操作
ATX目前已经分成了两个项目
安卓(Android) https://github.com/openatx/uiautomator2 简称u2
苹果(iOS) https://github.com/openatx/facebook-wda
✘ 按键精灵手机版 iOS 端需要越狱
✘ Calabash </mark>Calabash是一个开源的移动端UI自动化测试框架,支持android和IOS, 美团在探索自动化测试方案时,最初试用一段时间后放弃
- 在脚本开发和维护方面,成本确实低于函数级别的测试开发,它可以用一种类似自然语言的方式编写测试用例
- Calabash在业内相对小众,遇到问题就不太好解决。在编写自动化脚本时,元素定位的唯一性是一个看似简单实际上会有很多坑的问题,脚本的稳定性一定程度上依赖了如何进行元素定位。
- iOS接入Calabash的成本太高。Android的接入成本很低,只需要一个重签名的apk文件就可以了,并不依赖源码,而iOS的接入需要依赖源码做一些工作
✘ GAutomator 腾讯出的一个针对手游的UI自动化测试框架。
设计理念与使用方式,类似于Android的UIAutomator。GAutomator以引擎中的元素为操作对象(如Unity中的GameObject),通过操作GameObject实现UI自动化测试。基于GameObject的方式,不存在手机分辨率适配的问题,一份脚本能够运行在不同手机之上。~~需要集成GAutomator SDK到游戏中~~
✘ MonkeyTalk CloudMonkey公司被Oracle收购,MonkeyTalk及相关业务目前已经停止
✘ cocos-plugin
Testin支持cocos引擎手游测试的插件集,支持cocos2d-x和cocos2d-js全版本游戏引擎,包括cocos2d-x 2.x、cocos2d-x 3.x、cocos2d-js 3.x。
- 手游自动化测试插件:通过dump游戏对象信息,实现游戏对象的控件化,以实现精准的手游自动化测试
- TestinAgent SDK cocos插件:C++代码到Native代码(Java/ObjectiveC)的桥梁,方便在C++调用TestinAgent SDK,用于传递自定义用户信息、场景、错误等;实现对JavaScript、Lua脚本的错误收集
✘ Robotium
Robotium是一款国外的Android自动化测试框架,主要针对Android平台的应用进行黑盒自动化测试,它提供了模拟各种手势操作(点击、长按、滑动等)、查找和断言机制的API,能够对各种控件进行操作。Robotium结合Android官方提供的测试框架达到对应用程序进行自动化的测试。
2010年推出的第一款第三方测试工具, 无法跨应用,支持黑盒。
✘ Selendroid 依赖于Selenium:API(10-19), 基于instrumentation, 执行速度相较于Appium真的是很快了, 非主流的自动化方案,用的人少
✘ UIAutomator
Uiautomator是谷歌推出的,它提供了原生Android app和游戏的高级UI测试。这是一个包含API的Java库,用来创建功能性UI测试,还有运行测试的执行引擎。用于UI自动化测试的工具,也就是普通的手工测试,点击每个控件元素看看输出的结果是否符合预期。比如登陆界面分别输入正确和错误的用户名密码然后点击登陆按钮看看是否能否登陆以及是否有错误提示等。 注意:UI Automator测试框架是基于Instrumentation的API,运行在Android JunitRunner 之上,同时UI Automator Test只运行在Android 4.3(API level 18)以上版本。
✘ Instrumentation Android测试环境的核心是一个Instrumentation框架
iOS
✔ Macaca iOS需要部署XCTestWD, 一个基于WebDriver协议的服务
由阿里团队提供较新的测试框架, 很多中文资料
✘ Sikulix 由MIT(麻省理工学院) 研究团队发布的一种图形化编程技术(编程小白的福音)
使用Sikuli你只需要会写HelloWorld这种最基本的编程技能即可,用Sikuli不需要去写出一行行复杂的代码,而是用屏幕截图的方式,用截出来的图形元素组合出神奇的程序
网上与iOS相关的信息较少
✘ Airtest - 网易开源的UI自动化测试工具,适用于游戏和App
>
- 使用Airtest图像识别方式进行录制和运行脚本
使用Poco方式对进行录制和运行脚本需要游戏先集成Poco
> iOS-Tagent是基于facebook的 WebDriverAgent , 项目上进行开发的 , 目的是为了对 AirtestProject. 提供iOS平台的测试支持,在原项目的基础上进行了定制化的优化和功能调整。 如果需要使用airtest项目对iOS平台进行测试,请 事先准备一台macOS ,使用xcode部署 iOS-Tagent 成功后,能够在mac或windows机器上连接到iOS手机。请点击 链接 下载项目代码到本地进行部署。 这个项目基于 Xcode9 + iOS 11 平台进行开发和测试,目前已支持到iOS12,其他版本的xcode和iOS未经完整测试,可能会出现非预期的错误情况。
✘ ATX - 基于图像识别完成游戏的自动化操作,AutomatorX简称
需要知道应用的bundle_id,可以使用libimobiledevice工具查看手机已安装App信息,但新版本的系统协议可能进行了调整,需要先解决协议问题
ATX目前已经分成了两个项目
安卓(Android) https://github.com/openatx/uiautomator2 简称u2
苹果(iOS) https://github.com/openatx/facebook-wda1. ATX依赖比较少,安装快,上手也快 2. 可以测试第三方应用,比如微信,网易新闻之类 3. 更新方便,可以使用pip直接更新应用 4. 集成图像识别,可以解决仅靠UI无法定位识别的问题 5. 集成测试报告 6. 由知名企业网易的游戏测试开发团队开发(其实就是我们开发的),可以比appium更及时的响应需求,还可以用中文交流和沟通。
✔ Appium 依赖facebook WDA, 一个WebDriver协议, 移动自动化测试方案中比较有名的,也是国际通用的方案
✘ GAutomator 腾讯出的一个针对手游的UI自动化测试框架。
研究过手游自动化测试的同学都知道,虽然市场上已经有比较多成熟的自动化工具,如Android系统的UIAutomator,iOS的XCUITest和基于这些服务封装而来的appium和wda等,但都无法直接应用到手游自动化中。问题的关键原因是手游与其他APP在自动化测试技术上有巨大的不同,普通的APP是由Android/IOS的标准UI控件组成,而手游画面上几乎所有内容都是通过游戏引擎渲染生成。为了填补这块技术空白,帮助更多的手游快速实现自动化,我们在2016年推出了GAutomator(下文简称GA)这个业界第一款手游自动化框架
设计理念与使用方式, 类似于Android的UIAutomator。GAutomator以引擎中的元素为操作对象(如Unity中的GameObject),通过操作GameObject实现UI自动化测试。基于GameObject的方式,不存在手机分辨率适配的问题,一份脚本能够运行在不同手机之上。~~需要集成GAutomator SDK到游戏中 基于WebDriverAgent的工程(facebook WDA)~~
2018年绝对求生火热起来后,WeTest团队也迎合趋势在第一时间支持了UE4引擎的手游自动化
和Android系统一样,iOS也同样支持录制回放的能力,方便大家快速实现自动化
✘ Calabash </mark> 由Xamarin公司支持iOS需要源工程集成Calabash框架
Calabash-iOS是由Ruby编写一个客户端库和用Objective -C编写的一个服务框架calabash.framework。Calabash-iOS测试是由三部分组成:您的App,calabash.framework,Calabash客户端库和Step definitions 以及feature文件。
实际测试是用Gherkin写的(依靠Ruby代码的支持,并在Cucumber框架的上下文中运行)
✘ 按键精灵手机版 需要越狱
✘ Athrun 提供了AppFramework侵入式和Athrun_IOS基于录制的非侵入式两种实现
淘宝团队提供的一个很久的自动化测试方案
第一种AppFramWork是代码注入型</font>
第二种instrument Athrun就是对UI Automation的接口进行扩展,提高了原有接口运行的稳定性
第三种instrumentDriver基于instrument JS框架来开发InstrumentDriver服务端,在java上实现客户端,使用java脚本控制iOS自动化执行。该框架还实现了单步运行,调试等UI Automation没有的功能
✘ MonkeyTalk CloudMonkey公司被Oracle收购,MonkeyTalk及相关业务目前已经停止
也支持Android录制,iOS设备上回放
✘ cocos-plugin
✘ Kiwi
Kiwi是对XCTest的一个完整替代,使用xSpec风格编写测试。 Kiwi带有自己的一套工具集,包括expectations、mocks、stubs,甚至还支持异步测试。它是一个适用于iOS 开发的Behavior Driven Development(BDD)库,优点在于其简洁的接口和可用性,易于设置和使用,非常适合新手开发者。Kiwi使用Objective-C语言编写,易于IOS开发人员上手。
✘ KIF
KIF是Keep It Functional项目的缩写,是一款iOS app功能性测试框架,使用Objective-C语言编写,对苹果开发者来说非常容易上手,更是一款开发者广为推荐的测试工具。KIF tester使用私有API来了解App中的视图层级。但缺点是运行较慢。
✘ UIAutomation(Xcode 7以前)/UITesting(Xcode 7) 苹果原生自动化API