很多做测试的同学对 UI 自动化充满着向往,但又充满畏惧,经常不知道如何入手。一方面是因为技术薄弱,觉得自动化测试比较难,另一方面可能对自动化测试持怀疑态度。那到底什么是 UI 自动化测试,它能给我们带来什么样的价值呢?下面我们探讨下移动端的 UI 自动化方法。
什么是 UI 自动化?
- 首先,我们引用来自 Monkey 大神对的定义:UI 自动化包括界面层面(控件,元素,位置,显示等的识别)以及功能交互层面(往往是通过代码或者测试框架来模拟真实用户的操作)
- 从个人的理解来看,UI 自动化是通过工具或者脚本语言将测试过程模拟出来,并重复执行,用以验证功能是否正确的过程。
为什么要做 UI 自动化测试?
- 对于移动 app 而言,很多公司都采用敏捷开发的模式,因此测试也必须敏捷测试,每个迭代的周期非常短,经常要对原有功能进行回归测试,增加大量重复人力成本。引入 UI 自动化测试可以用来快速回归测试 app 原有功能,测试人员只需要关注新功能的测试。
- 移动端 App 的测试用例大部分是功能验证相关的用例,通过 UI 操作即可验证,这就为 UI 自动化提供了便利条件。
- 测试重复度高,执行效率低,通过 UI 自动化可以快速重复执行,达到提高测试效率的目的。
常用 UI 自动化测试工具
这几年,移动端技术发展非常迅速,测试手段也同样发展迅速,出现了大量用于对移动端 app 进行自动化测试的工具,下面简单列举下:
- Monkey 是 Google 开发的 UI/应用测试工具,也是命令行工具,主要针对压力测试。你可以在任意的模拟器示例或者设备上运行。Monkey 发送一个用户事件的 pseudo-random 流给系统,作为你开发应用的压力测试。
- IOS UI Automation,基于 IOS instrument。
- MonkeyTalk 通过在 App 中加入 client 自动化为 iOS 和 Android 应用进行真实的,功能性交互测试。有成熟的集成开发环境,有 API 支持和持续集成解决方案,且方便二次开发,目前不开源,属于功能强大但没有被很好推广的测试框架。
- Robolectric 是一款 Android 单元测试框架,使用 Android SDK jar,所以你可以使用测试驱动开发 Android 应用。
- Robotium 结合 Android 官方提供的测试框架达到对应用程序进行自动化的测试。另外,Robotium 4.0 版本已经支持对 WebView 的操作。
- uiautomator 测试框架提高用户界面(UI)的测试效率,通过自动创建功能 UI 测试示例,可以在一个或者多个设备上运行你的应用。
- Selendroid 使用 Selenium 2 客户端 API 编写。可以在模拟器和实际设备上使用,也可以集成网格节点作为缩放和并行测试。
- Appium 是一个开源的、跨平台的自动化测试工具,适用于测试原生或混合型移动 App,支持 iOS、Android 和 FirefoxOS 平台。
- Calabash 是一款适用于 iOS 和 Android 平台的跨平台应用测试框架,支持 Cucumber,开源且免费,隶属于 Xamarin 公司。
主流跨平台 UI 自动化测试框架的对比分析
一个好的自动化测试框架,它应该是要能够支持跨平台的,目前市面上有三个主流的跨平台测试框架,这里简单比较分析三个框架的优缺点。
测试框架 |
Appium |
Calabash |
MonkeyTalk |
支持的平台 |
Android、iOS、H5 |
Android、iOS、H5 |
Android、iOS、H5 |
所需环境 |
Appium、Node、JDK、Android SDK、Selenium、Xcode |
Calabash、Gem、Ruby、JDK、Android SDK、Xcode |
MonkeyTalk、Android SDK、Xcode |
支持的语言 |
Almost Any |
Ruby |
MonkeyTalk、Java、Javascript |
支持录制回放 |
No |
Yes |
Yes |
工作原理 |
通过扩展 WebDriver API 编写脚本模拟测试步骤,然后通过 Server 翻译后发送给对应的移动设备 |
使用 Cucumber 框架组织测试用例,通过 Http 和 Json 与测试 app 通信 |
通过嵌入在 app 中的 client 对用户操作进行录制回放 |
是否开源 |
Yes |
Yes |
No |
优点 |
开源,社区活跃 |
行为描述语言,用例重用度高 |
录制回放,无需编码,环境易于搭建 |
缺点 |
大量编码,元素难以定位 |
环境复杂,UI 难以定位 |
灵活性稍差,需要在 App 中安装 Client |
总结
套用网上一位测试朋友的话,“自动化测试听起来很神秘,学起来很简单,用起来很麻烦”。UI 自动化的优点很多,但要考虑适用场景,否则适得其反。同样,我们也要选好一个适合的自动化框架,这样才能提高效率。总而言之,想搞好自动化测试,还需要测试人员不断地提高测试理解力,分析能力和代码水平。