Android测试之Robotium自动化测试框架

一、简介
Robotium是一款国外的自动化测试框架,是一款免费的Android UI测试工具,主要针对Android平台的应用进行黑盒自动化测试,它提供了模拟各种手势操作(点击、长按、滑动等)、查找和断言机制的API,能够对各种控件进行操作。
Robotium测试脚本是用java写的,该框架使用简便,支持性良好,与Monkeyrunner相比测试也更为高级,不必为每个设备编写脚本。但没有十全十美的框架,Robotium的短板在于它不适合与系统软件的交互。

二、下载与配置
源码获取:http://code.google.com/p/robotium/

源API文档:http://robotium.googlecode.com/svn/doc/index.html

官方示例记事本(NodePad):http://pan.baidu.com/s/1qWLVL72

重签名工具:http://pan.baidu.com/s/1i3H0tKD

使用Robotium进行测试的过程非常简单,以eclipse为例:
1.File->New->Android Test Project,输入测试的工程名字,选择要测试的工程;
2.右键新建的工程名,选择Properties->Java Build Path->Libraries
->Add External JARs…,选择下载好的robotium-solo.jar包,我选择的是robotium-solo-5.6.0.jar,为了方便阅读,建议将robotium-solo-5.6.0-javadoc.jar也一并导入;
3.在src/test包下新建java文件,这就是我们的测试文件了,到此配置完成,开始编写脚本。
注:以上默认待测工程在本地,如果是对网上下载的apk进行测试,需要将apk重签名,因为robotium要求被测应用和测试程序要有一致的签名。apk的重签名可以使用命令行,也可以使用工具re-sign.jar甚至是360辅助工具,具体细节不在此处提及。

三、语法(以官方给出的NodePadTest为例)
现在进入测试脚本的编写,第一步当然是导包:

//测试工程要继承用来测试activity的父类
import android.test.ActivityInstrumentationTestCase2;
//robotium提供的测试用类
import com.robotium.solo.Solo;
//待测工程
import com.example.android.notepad.NotesList;

构造方法使用泛型,参数为待测应用的入口activity的名字,在应用NotePad里是NodesList.java,所以为:

public Test() {
    super(NotesList.class);
}

在测试方法前要覆盖父类的setUp()方法和tearDown()方法,这两个方法分别用来初始化solo、绑定对应的Antivity和清理垃圾资源、关闭Activity:

@Override
public void setUp() throws Exception {
    //setUp() is run before a test case is started. 
    //This is where the solo object is created.
    //这里的getActivity()调用了父类的getActivity()方法,所以返回
    //的是刚才传入的NodesList
    solo = new Solo(getInstrumentation(), getActivity());
}

@Override
public void tearDown() throws Exception {
    //tearDown() is run after a test case has finished. 
    //finishOpenedActivities() will finish all the 
    //activities that have been opened during the test 
    //execution.
    solo.finishOpenedActivities();
}

创建需要的测试方法,使用solo类进行测试。值得注意的是,所有的测试方法都必须以test开头,程序会自动调用test开头的方法,每次调用都会运行一次测试工程。

solo类提供了点击、长按、拖拽、搜索等多种方法:

//声明Solo类型的成员变量
private Solo solo;

//新建一个测试方法
public void testAddNote() throws Exception {
    //解锁屏幕
    solo.unlockScreen();
    //点击名为"Add note"的菜单项
    solo.clickOnMenuItem("Add note");
    //断言NoteEditor的activity已经打开,如果断言不成立会输出"Expected NoteEditor activity"
    solo.assertCurrentActivity("Expected NoteEditor 
    activity", "NoteEditor"); 
    //在文本框0输入"Note 1"
    solo.enterText(0, "Note 1");
    //返回到第一个Activity
    solo.goBack();
    //再次点击"Add note"
    solo.clickOnMenuItem("Add note");
    //在文本框0输入"Note 2"
    solo.typeText(0, "Note 2");
    //返回
    solo.goBack(); 
    //截图,图片会保存到"/sdcard/Robotium-Screenshots/"
    solo.takeScreenshot();
    //搜索刚才输入的"Note 1"和"Note 2"
    boolean notesFound = solo.searchText("Note 1") && solo.searchText("Note 2");
    //断言"Note 1"和"Note 2"都被找到
    assertTrue("Note 1 and/or Note 2 are not found", 
    notesFound); 
}

最后将工程Run As->Android JUnit Test,在虚拟机或真机上运行就可以了!

其他solo的常用方法,参见Solo的API文档:
http://www.jarvana.com/jarvana/view/com/jayway/android/robotium/robotium-solo/2.0.1/robotium-solo-2.0.1-javadoc.jar!/index-all.html

今天看了一天电脑,看的我浑身的头疼,胳膊腿子恶心【晕】,今后还会更博其他Android自动化测试框架,祝自己顺利。

你可能感兴趣的:(Android)