Android测试环境
Android测试环境的核心是一个Instrumentation框架。Instrumentation框架通过将主程序和测试程序运行在一个进程来实现功能,通过Java反射机制,来获取当前窗口所有视图,并根据该视图查找到目标控件的属性信息,并计算出目标控件中心点坐标。然后,利用Instrument内部接口,实现点击操作。
Android自身提供了对Instrumentation测试的基本支持,其中之一就是位于android.test包内的ActivityInstrumentationTestCase2类,它扩展了JUnit的TestCase类提供的Android activities的功能测试。在应用测试中,每个activity首先会被Instrumentation初始化,然后再加载到Android模拟器来执行。
Robotium的case都继承ActivityInstrumentationTestCase2。设计的目的:主要用来得到测试的Activity,执行单元测试用例。getActivity()是入口
Robotium - Instrumentation
Robotium框架,使用的也是Instrumentation,通过将测试的工程项目安装到AVD(模拟器)上面来与运行时的项目交互,触发其组件的动作等。这种方法需要两个项目同时安装到AVD中。
Robotium简介:
是一个测试框架,能方便为Android应用程序编写强大、健壮的自动化黑盒测试用例。利用Robotium的支持,用例开发人员能编写功能、系统和验收测试方案,跨越多个Android activities,Robotium支持Activities,Dialogs, Toasts, Menus, Context Menus

官网:www.robotium.org
中文社区:www.robotium.cn

优点:
1. 可以以最少的知识去测试应用程序,和发展强大的测试用例。
2. 可以自动处理多个Android activity
3. 开源, 版本更新迅速
4. 用于黑河的自动化测试,可以在有源码或者只有APK的情况下对目标应用进行测试,提供了模仿用户操作行为的API,比如输入text等。
5. 通过运行时绑定GUI组件使测试用例更强大
6. 执行测试用例速度快
7. 顺利整合了Maven或Ant来运行测试,持续集成的一部分
常用方法:
get

getCurrentActivity() --
getText(String)
getView(int)
getEditText(String)
getImage(int) -- Returns an p_w_picpathView with a given index

Click:
clickOnButton(int)
clickOnButton(String)
clickOnCheckBox(int)
clickOnView(View)
clickOnText(String)
clickLongOnText(String)
clickOnRadioButton(int)
clickOnScreen(float, float)

drag & scroll:
darg(float, float, float, float, int)
scrollDown()/scrollToBottom()/scrollToTop()/scrollToSide(int side)

search:
searchText(String)
searchEditText(String)
searchButton(String, boolean)

wait:
waitForActivity(String name)
waitForCondition(Condition condition, timeout)
waitForDialogToClose(long timeout)
waitForTest(String text)
waitForView(View view)
waitForWebElement(By by)

Class:
By: public abstract class By extends Object    用于处理web元素
Condition:public interface Condition    Method: isSatisfied()
RobotiumUtils: public class RobotiumUtils extends Object    包含一些工具性的方法,供其他类使用
Solo:public class Solo extends Object    Robotium测试开发的主要类,对views, WebViews, Activities, Dialogs, Menus, Context Menus有很好的支持
Timeout: public class Timeout extends Object     获取或设置超时时间
WebElement:public class WebElement extends Object    WebViews的元素,有getClassName, getTagName等属性

编写Robotium测试程序:
指定需要启动的Activity,launcherActivityClass = Class.forName(ActivityName);
在构造函数里传入该Activity
重写setUp() -- 初始化Solo对象
重写tearDown() -- 释放所有Activity资源
编写测试用例

为什么需要重签名?
因为测试apk和被测apk的签名需要一致才能运行并驱动测试
如何进行重签名?
双击re-sign.jar, 将重签名的apk拖至re-sign.jar窗口中
cmd: java -jar xxx/resign.jar(jar包所在位置)
InstrumentationTestRunner: 执行JUnit Test, 可以理解为对用例进行管理和操作,继承在Instrumentation