1. 单元测试
单元测试是单一实体(类或者方法)的功能性测试,检查程序是否按照预期结果正常运行,及时发现代码中的逻辑错误,以保证应用系统在迭代开发中的正确性。
1.1 JUnit
JUnit
是xUnit
测试框架下Java语言的单元测试框架。同时JUnit
是很常用的白盒测试的一种。
- 优点
- 白盒测试,测试人员可以根据源代码,编写项目所有的接口或者方法的单元测试用例;
- 自动化测试,并判断输出执行结果,不需要人为的干预;
- 容易集成在构建过程中,及时发现问题
- 速度快,支持测试覆盖率等代码质量检测工具
- 缺点
- 只支持纯Java代码,测试对象中不能包含Android Framework相关代码
1.2 Espresso
Espresso
是Google正对Android UI提供一种单元测试方法,属于白盒测试,需要开发人员或者熟悉项目源代码的测试人员编写单元测试用例。它的特点是规模更小、更简洁,API更加精确,编写测试代码简单,容易快速上手。
Espresso
测试对象是Activity
,所以其测试用例步骤主要如下:
- 查找元素:找到UI上测试的元素位置,比如找到一个按钮
- 执行操作:给某个元素执行一个动作,比如触发按钮的点击事件
- 检查结果:判断做出的动作是否符合期望,比如按钮点击后,是否符合我的期望
2. 自动化测试(功能测试)
2.1 Instrumentation
早期Google提供的Android自动化测试工具类。通过Instrumentation你可以模拟按键按下、抬起、屏幕点击、滚动等事件。不能跨多个App。
2.2 UiAutomator
UiAutomator
谷歌在Android4.3推出的UI自动化测试框架,可以模拟人对手机的操作,比如各种点击、长按、滑动、按键等操作动作。可以对整个系统做UI自动化测试,不局限于APP。
2.3 Robotium
Robotium
是非常著名的Android自动化测试框架,支持native和hybrid两种应用模式,可以非常简单方便的执行Android UI黑盒测试。
主要特点:
- 支持
Native
和Hybrid
应用; - 不仅对单
Activity
编写测试,还可以自动处理多Activity
的应用测试; - 编写测试用例比较简单,相对于
Instrumentation
来说,测试代码可读性比较好; - 测试用例执行速度比较快,可以与Maven、Gradle以及Ant更好的结合,可以支持持续集成的测试;
- 提供
Robotium Recorder
(收费)测试用例的脚本录制,可以方便快速地编写测试用例; -
Robotium
主要缺点不能跨App。
2.4 Appium
Appium封装了标准Selenium客户端类库,不但支持IOS平台和Android平台的navtive应用、web应用和混合应用,还支持Window,Mac平台。
主要特点:
- 支持Android、iOS、Firefox OS:IOS部分是封装了UIAutomation;Android 4.3以上是用UiAutomator,Android 2.3 ~ 4.2用的是Instrumentation;
- 跨App,支持
Native App
、Hybird App
、Web App
; - Appium Server是使用Node.js开发,通过NPM在
MacOS
、Windows
或者Linux
系统上安装部署; - 支持很多语言来编写测试脚本,
Java
、Javascript
、PHP
、Python
、C#
、Ruby
等主流语言; - 扩展了
WebDriver
,封装Selenium
客户端类库,对具有Selenium
Web自动化测试经验的人员来说,比较容易上手; - 提供
Appium Inspector
工具,可以非常方便的查看App界面元素的元数据属性信息,Mac版本支持测试用例录制;
3. 压力测试
3.1 Monkey
Monkey是Android SDK自带的测试工具,在测试过程中会向系统发送伪随机的用户事件流,如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试,也有日志输出。
3.2 MonkeyRunner
MonkeyRunner是一Api工具包,比Monkey强大,写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。
4. 对比总结
在应用开发中,项目代码组织架构设计要合理,方便进行单元测试。推荐使用JUnit
进行非Android Framework的函数或类的单元测试,借助jacoco
等插件统计分析代码覆盖率。
Espresso
测试框架可以进行UI单元测试,但是App的Activity往往会涉及Android其他模块,例如Service,Broadcast,所以推荐使用Appium
等测试工具进行App应用的功能集成化自动测试。
Appium
具有UiAutomator
、Robotium
等测试工具所有的特性,不仅支持Hybird App
、Web App
这类非原生应用,而且还支持iOS等其他移动平台;Appium
本身封装拓展了Selenium
测试工具,所以等于掌握Appium
自动化测试工具,就可以编写Android、iOS、Web等多端的应用测试。
Monkey
是一随机事件流测试工具,推荐使用于应用的稳定性测试,可以及早的发现App的Crash
问题。