赵丽娜
简介
移动APP的UI自动化测试长久以来一直是一个难点,难点在于UI的”变”, 变化导致自动化用例的大量维护。 从分层测试的角度,自动化测试应该逐层进行。 最大量实现自动化测试的应该是单元测试, 最容易实现也最容易在早期发现问题; 其次是接口级测试, 以验证逻辑为目的进行自动化, 由于接口的相对稳定, 自动化测试成本相对也可以接受; 自动化成本最大的便是UI级自动化测试, 然而UI界面是直接反馈给用户的效果展示,适度的尤其是BVT级的自动化测试也是非常必要的。 本文通过分析几种自动化框架的异同, 使测试人员在选择自动化框架时有所参考。
Android自动化框架
1. Instrumentation
https://developer.android.com/reference/android/app/Instrumentation.html“>https://developer.android.com/reference/android/app/Instrumentation.html
Instrumentaion 是Android自带的一个测试框架,是很多其它测试框架的基础,可以在同进程中加载被测组件。它有很多丰富的高层封装,使用者可以使用基于instrumentation的其他框架,避免过多二次开发量。但Instrumentation不支持跨应用,导致基于instrumentation的框架都继承了这个缺点。
2. Robotium
https://github.com/robotiumtech/robotium
Robotium是基于Instrumentation框架开发的一个更强的框架. 对常用的操作进行了易用性的封装. 用于开发功能性、系统和验收测试场景。它运行时绑定到GUI组件。它安装了一个测试用例套件作为在Android设备或仿真器上的应用程序,并提供用于执行测试的真实环境。
优点: 容易在最短的时间内编写测试脚本,易用性高。 自动跟随当前activity。 由于运行时绑定到GUI组件,所以相比Appium,它的测试执行更快,更强大。 不访问代码或不了解app实现,也可以工作。 支持Activities、Dialogs、Toasts、Menus、Context Menus和其他Android SDK控件。
缺点: 不能处理flash和web组件。在旧设备上会变得很慢。 由于不支持iOS设备,当自动化测试同时覆盖 android与iOS的情况时,测试会被中断。 没有内置的记录和回放功能.,使用记录功能需要 TestDroid 和 Robotium Recorder 这样的收费工具。
3. UIAutomator
https://google.github.io/android-testing-support-library/docs/uiautomator/
UIAutomator是由谷歌提供的测试框架,它提供了原生Android app和游戏的高级UI测试。这是一个包含API的Java库,用来创建功能性UI测试,还有运行测试的执行引擎。该库自带Android SDK。
优点:它在运行访问不同的进程时,会给JUnit测试案例特权。库由谷歌社区支持和维护。
缺点:仅支持android 4.1(API level 16)及以上。 不支持脚本记录。 支持的重点是Java。 你不能获得当前活动或仪表化。 目前不支持web视图。 库仅支持使用Java,因此很难和使用Ruby的cucumber混合。如想支持BDD框架,建议使用Java自己的BDD框架,例如Jbehave。
4. Espresso
https://google.github.io/android-testing-support-library/docs/espresso/index.html
Espre