1. Instrumentation
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
Espresso 是 Google 的开源自动化测试框架。相对于 Robotium 和 UIAutomator,它的特点是规模更小、更简洁,API 更加精确,编写测试代码简单,容易快速上手。因为是基于 Instrumentation 的,所以不能跨 App。
5. Calabash
https://github.com/calabash
Calabash 是一个适用于 iOS 和 Android 开发者的跨平台 app 测试框架,可用来测试屏幕截图、手势和实际功能代码。Calabash 开源免费并支持 Cucumber 语言,Cucumber 能让你用自然的英语语言表述 app 的行为,实现 BDD(Behavior Driven Development,行为驱动开发)。 Cucumber 中的所有语句使用 Ruby 定义。
优点: 有大型社区支持。 列表项 简单,类似英语表述的测试语句 支持在屏幕上的所有动作,如滑动,缩放,旋转,敲击等。 跨平台开发支持(同样的代码在 Android 和 iOS 设备中都适用)。
缺点: 测试步骤失败后,将跳过所有的后续步骤,这可能会导致错过更严重的产品问题。测试耗费时间,因为它总是默认先安装 app。 需要 Calabash 框架安装在 ios 的 ipa 文件中, 因此测试人员必须要有 iOS 的 app 源码。 除了 Ruby,对其他语言不友好。
6. Appium
http://appium.io/
Appium 是一个开源的、跨平台的自动化测试工具,支持 IOS、Android 和 FirefoxOS 平台。 通过 Appium,开发者无需重新编译 app 或者做任何调整,就可以测试移动应用,可以使测试代码访问后端 API 和数据库。它是通过驱动苹果的 UIAutomation 和 Android 的 UiAutomator 框架来实现的双平台支持,同时绑定了 Selenium WebDriver 用于老的 Android 平台测试。开发者可以使用 WebDriver 兼容的任何语言编写测试脚本,如 Java, OC, JS, PHP,Python, Ruby, C#,Clojure 和 Perl 语言。
7. Selendroid
https://www.gitbook.com/book/lihuazhang/selendroid/details
Selendroid 是一个基于 Instrumentation 的一个框架. 完全兼容 Webdriver 协议。 Selendroid 可以在模拟器和实际设备上使用,也可以集成网格节点作为缩放和并行测试。
8. Robolectric
http://robolectric.org/
Robolectric 是一款 Android 单元测试框架,但它并不依赖于 Android 提供的测试功能,它通过实现一套 JVM 能运行的 Android 代码,然后在 unit test 运行的时候去截取 android 相关的代码调用,然后转到 Robolectric 实现的代码(shadow objects)去执行这个调用的过程。因此它不像模拟器或设备需要 dexing(Android dex 编译器将类文件编译成 Android 设备上的 Dalvik VM 使用的格式)、打包、部署和运行的过程,大大减少了测试执行的时间。Pivotal 实验室声称使用 Robolectric 可以在 28 秒内运行 1047 个测试。
除了实现 Android 里面的类的现有接口,Robolectric 还给每个 Shadow 类额外增加了很多接口,可以读取对应的 Android 类的一些状态。比如它为 ImageView 提供了 getImageResourceId() 方法,测试者可以通过 getImageResourceId() 接口来确定是不是正确显示了期望的 Image。
9. RoboSpock
http://robospock.org/
RoboSpock 是一个开源的 Android 测试框架,它提供了简单的编写 BDD 行为驱动开发规范的方法,使用 Groovy 语言,支持 Google Guice 库。RoboSpock 合并了 Robolectic 和 Spock 的功能。
10. Cafe
http://cafe.baidu.com/#panel1
Cafe 是百度出品的一个基于 Robotium 的测试框架,它提供了跨进程的测试解决方案。
12. 其他
其他自动化框架还有应用于稳定性测试的 Monkey 系列(Monkey, Monkeyrunner, MonkeyTalk), 其中 MonkeyTalk 支持 iOS 和 Android,它可以为应用进行真实的,功能性交互测试。MonkeyTalk 提供简单的 "smoke tests",复杂数据驱动的测试套件。MonkeyTalk 支持原生,移动和混合应用,真实设备或者模拟器。MonkeyTalk 使得场景捕获非常容易,可以记录高级别,可读的测试脚本。还有适用于浏览器自动测试的 Selenium WebDriver,可以真实测试用户行为,用户交互如触摸、手指滚动、长按等,还支持 HTML5 的一些特性,比如本地存储、session 存储、应用缓存等。而 CTS 则是应用于兼容性测试的自动化工具, CTS 大部分是基于 Junit 和仪表盘技术编写的。还扩展了自动化测试过程,可以自动执行用例,自动收集和汇总测试结果。CTS 采用 XML 配置文件的方式将这些测试用例分组成多个测试计划(plan),第三方也可以创建自己的 plan。
1. XCTest
https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/01-introduction.html
XCTest 是苹果在 iOS 7 和 Xcode5 引入的一个简单而强大的测试框架,它的测试编写起来非常简单,并且遵循 xUnit 风格。XCTest 的优点是与 Xcode 深度集成,有专门的 Test 导航栏,但因为受限于官方测试 API,因此功能不是很丰富。
2. UIAutomation
https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/UIAutomation.html
UIAutomation 是苹果提供的 UI 自动化测试框架,使用 Javascript 编写。基于 UIAutomation 有扩展型的工具框架和驱动型的框架。扩展型框架以 JavaScript 扩展库方法提供了很多好用 js 工具,注入式的框架通常会提供一些 Lib 或者是 Framework,要求测试人员在待测应用的代码工程中导入这些内容,框架可以通过他们完成对 app 的驱动。驱动型 UI Automation 在自动化测试底层使用了 UI Automation 库,通过 TCP 通信的方式驱动 UI Automation 来完成自动化测试,通过这种方式,编辑脚本的语言不再局限于 JavaScript。
3. Frank
http://www.testingwithfrank.com/
Frank 是 iOS 平台一款非常受欢迎的 app 测试框架,它使用 Cucumber 语言来编写测试用例, Frank 包含一个强大的 “app inspector”--Symbiote,可以用它来获得运行中 app 的详细信息,便于开发者将来进行测试回顾。 它允许使用 Cucumber 编写结构化英语句子的测试场景。 Frank 要求测试时在应用程序内部编译,这意味着对源代码的改变是强制性的。操作方式为使用 Cucumber 和 JSON 组合命令,将命令发送到在本地应用程序内部运行的服务器上,并利用 UISpec 运行命令。
优点: 测试场景是在 Cucumber 的帮助下,用可理解的英语句子写的。 强大的 Symbiote 实时检查工具。 活跃的社区支持。 不断扩大中的库。
缺点: 对手势的支持有限。 在设备上运行测试有点难。 修改配置文件需要在实际设备上运行。 记录功能不可用。
4. KIF
http://www.oschina.net/translate/ios-ui-testing-with-kif
KIF 是 Keep It Functional 项目的缩写,是一款 iOS app 功能性测试框架,使用 Objective-C 语言编写,对苹果开发者来说非常容易上手,更是一款开发者广为推荐的测试工具。KIF tester 使用私有 API 来了解 App 中的视图层级。但缺点是运行较慢。
5. Calabash-ios
详见 Calabash-android 描述。
6. Subliminal
http://inkling.github.io/Subliminal/
Subliminal 是另一款与 XCTest 集成的框架。与 KIF 不同的是,它基于 UIAutomation 编写,旨在对开发者隐藏 UIAutomation 中一些复杂的细节。
7. Kiwi
https://github.com/kiwi-bdd/Kiwi/wiki/Getting-Started-with-Kiwi-2.0
Kiwi 是对 XCTest 的一个完整替代,使用 xSpec 风格编写测试。 Kiwi 带有自己的一套工具集,包括 expectations、mocks、stubs,甚至还支持异步测试。它是一个适用于 iOS 开发的 Behavior Driven Development(BDD)库,优点在于其简洁的接口和可用性,易于设置和使用,非常适合新手开发者。Kiwi 使用 Objective-C 语言编写,易于 IOS 开发人员上手。
8.Appecker
http://code.tencent.com/appecker.html
Appecker 是一款用于 iOS 系列系统的自动化测试框架,是腾讯的一个开源项目。Appecker 采用 Objective C 为测试用例的开发语言, 完整支持 iOS 上的 UI 功能测试、单元测试并且可以良好地支持自动化运行。
总结(IOS)
IOS 自动化测试框架继承关系如下。 XCTest 与 Xcode 的 IDE 直接集成,使用简单, 但其不支持 stub 和 mock, 所以单使用 XCTest 框架的较少。 Kiwi 是一个 iOS 平台十分好用的行为驱动开发 BDD 的测试框架,有着非常漂亮的语法,可以写出结构性强,非常容易读懂的测试。 UI Automation 是 Apple 官方提供的 UI 自动化测试的解决方法,但接口不够丰富。
KIF、Frank、Calabash 都是通过使用代码的形式来模拟事件触发,使得被测代码就像是由用户行为所触发的一样。但这样的代价是插入一个额外层的复杂度。 IOS 测试框架中支持 BDD 的有 calabash 和 Kiwi。 可选用的单元测试框架有 Kiwi,Specta,Quick 等,而 KIF,Subliminal 和 calabash 更适用于 UI 级验收测试。