关于robotium的那些事 robotium的优缺点

接触robotium真的不久,关键是公司要开发一款自动化测试工具,不幸的是,我以小白的身份,被拉了进来,不得已,只好学了。

不多不少,大概有一个多月了吧,多多少少有些收获,打算总结下,发出来晒晒。当然,也是有感与自动化测试,网上实际的例子比较上,所以贴几个例子进来。我是小白,我的例子也就很小白,所以,高手和专业请绕道。

首先,要搞robotium,必须要下载robotium-solo-4.1.jar和robotium-solo-4.1-javadoc.jar,这是前提。不过好像现在已经到4.2了吧。

其次,就是创建测试工程。这里,我将介绍给大家三种不同的创建方法。

一、最简单的创建方法:

先创建一个android工程(TestedProject),做为被测工程。在这个工程里,我做了三个activity,第一个activity里只有一个按钮,点击跳转,第二个activity里有一个按钮,一个editText,一个listView,一个Spinner,点击按钮实现跳转。第三个activity只有一个TextView(包名为根路径.third)。我相信,看这个博客的人,都知道这个工程怎么建,不贴代码了,以免浪费篇幅。

创建测试工程。右键点击TestedProject,new --> other --> android test project,点next -->输入工程名(本人用TestProject),next -->注意这个界面有个单选按钮,记得选This Project,finish.

src下有一个空包,右键,创建类(本人用Test),这个工程继承ActivityInstrumentationTestCase2。

代码如下:

public class Test extends ActivityInstrumentationTestCase2<MainActivity> {

private Solo solo;

private Solo2 solo2;

public Test() {

super(MainActivity.class);

}

@Override

protected void setUp() throws Exception {

// setUp() is run before a test case is started.

// This is where the solo object is created.

solo = new Solo(getInstrumentation(), getActivity());

}

@Override

protected 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();

}

/**

* 测试点击事件

*

* @throws InterruptedException

*/

public void testClick() throws InterruptedException {

solo.assertCurrentActivity("进入MainActivity", "MainActivity");

Thread.sleep(1000);//这个必须有,不然会找不到组件的错误

solo.clickOnButton(0);//这里的“0”,是在界面上数的。当然,clickOnButton总共有三种方法,第二种是跟据button的text找,第三种是跟据 button在原工程中的id找。

//根据id找的方法如下

/**

* Activity currentActivity = solo.getCurrentActivity();

* int id = currentActivity.getResources().getIdentifier("btn", "id", currentActivity.getPackageName());"btn"是button的id,“id”是btn的类型,这里是根据id找,所以不用改

* Button btn = (Button) solo.getView(id);

* solo.clickOnView(btn);

*

*4.2有个新方法,solo.getView("btn")是对上面的内容进行了封装,更简单了。

* */

Thread.sleep(1000);

solo.enterText(0, "这只是个例子");

Thread.sleep(1000);

solo.pressSpinnerItem(0, 2);//(“0”)是第一个spinner,2是第二行。

Thread.sleep(1000);

solo.clickInList(2);//点第1个listView的第二行

solo.clickOnButton("下一个");

solo.sendKey(KeyEvent.KEYCODE_POWER);

Thread.sleep(1000);

}

}

作为一个例子,这里,我只是简单的写了几个函数。对于solo类中的一些重要的函数,我也做下说明。当然,因为在家里,手头上没有robotium源码,所以,只能写上一些自己记下的方法。上面用到的就不说了。

1、solo.sendKey(),这个方法,主要是一些系统定义的按钮。如HOME,MENU,BACK,音量,还有键盘上的所有键。当然,它只能发命令,不能模似用户点击键盘。因为点击键盘会牵扯到跨进程操作。(跨进程,万恶的跨进程)

2、isSearch...这一类的方法,主要是判断一些控件是不是存在。

3.is..checked这一类的方法,主要是用来判断一些可选的组件,如checkBox是不是被选中

……

第二种方法,当只有APK,没有源码时(众所周知,一般都没有源码)创建方法

创建测试工程。右键点击TestedProject,new --> other --> android test project,点next -->输入工程名(本人用TestProject),next -->注意这个界面有个单选按钮,记得这里不是选This Project,先万注意,finish.

创建工程之后,会出现一个空包,在包下建立类(我依旧用TestSettings)这个例子是我写的测试settings模块的例子,当然,依旧继承的是ActivityInstrumentationTestCase2类。但是,这个时候,该类的代码如下

public class TestSettings extends ActivityInstrumentationTestCase2{//这里注意,后面没有<Activity>

private static final String PKG_NAME = "com.android.settings";//根目录

private static Class activityClass;

private Solo solo;

static{

try {

activityClass = Class.forName(PKG_NAME+".Settings");//你要测的类。当然,如果你的类是根目录.xxx.Activity,那么,这里就写activityClass = Class.forName(PKG_NAME+"xxx.Activity");

} catch (ClassNotFoundException e) {

}

}

public TestSettings() {

super(PKG_NAME,activityClass);

}

@Override

protected void setUp() throws Exception {

solo = new Solo(getInstrumentation(), getActivity());

}

@Override

protected void tearDown() throws Exception {

solo.finishOpenedActivities();

}

public void testClick() throws InterruptedException {

//略

}

}

第二种方法,比第一种方法好的地方是不需要源码也可以进行测试。但是,缺点很明显,没有界面,只能通过发指令或在eclipse中右键来启动,不能像其它apk一样运行,很不方便

第三种方法,正好解决这个问题。

这个工程其实就是一个一般的应用,建工程时,和其它工程也样,也是建一个android application project.

工程建好之后,在main_activity.xml中,加入一个按钮(本例中的控件id是settings).

在MainActivity中加入如下代码,便可以在点击这个按钮后,启动测试类,进行测试。测试完了,如果没报错,会返回至这个类。

此类的源码如下(我特意把package com.settings.display.test也贴了出来,注意它哦!!):

package com.settings.display.test;

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

((Button) this.findViewById(R.id.settings))

.setOnClickListener(new Button.OnClickListener() {

@Override

public void onClick(View v) {

MainActivity.this

.startInstrumentation(

new ComponentName(

"com.settings.display.test",//是不是似曾相识?它就是这个类的package,当然,你也要注意,让它和AndroidManifest.xml中的package="com.settings.display.test"一致,如果不一致,请你改成一致。不然,

//后果你可以试试

"android.test.InstrumentationTestRunner"),//这里不用改。这个参数,也是与AndroidManifest.xml中的android:name="android.test.InstrumentationTestRunner"一致的。请不要修改。

null, null);

}

});

}

}

AndroidManifest.xml中要做修改,源码如下:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.settings.display.test"

android:versionCode="1"

android:versionName="1.0" >

<uses-sdk

android:minSdkVersion="8"

android:targetSdkVersion="17" />

<application
关于robotium的那些事 robotium的优缺点

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

<activity

android:name="com.settings.display.test.MainActivity"

android:label="@string/app_name" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<uses-library android:name="android.test.runner" /><!-- 注意,这里是后来加入的,表明这个类是个测试类-->

</application>

<instrumentation android:targetPackage="com.android.settings"<!--这里,是你要测的APK的根路径,我测的是settings,所以,这里写的是settings的根路径-->

android:name="android.test.InstrumentationTestRunner" /><!-- 也注意这里-->

</manifest>

这里于一般的应用不一样的地方在于加入了两处代码,功能也有说明:

1、<uses-library android:name="android.test.runner" />

2、<instrumentation android:targetPackage="com.android.settings"<!--这里,是你要测的APK的根路径,我测的是settings,所以,这里写的是settings的根路径-->

android:name="android.test.InstrumentationTestRunner" /><!-- 也注意这里-->

也请注意,这两处代码放的位置。一个是application的量,一个是manifest的量,别搞错哦。

本来想写点总结的,但是看看时间,好像有点晚了,不想动了,看到的朋友,自己体会吧。当然,不排除我哪天有时间,给在后面补充点呢。

如果你抄了我的代码,或者在我这里得到了启发,请收藏,谢谢!

谢绝盗版!

标签: robotium, 自动化测试, solo, 自动化测试例子, 自动化测试demo

  

爱华网本文地址 » http://www.aihuau.com/a/25101012/119881.html

更多阅读

转载 李德福和中源协和的那些事 李德福 中源协和

原文地址:李德福和中源协和的那些事作者:伍家的永泰红磡集团董事长、中源协和实际控制人李德福从1992年至今,永泰红磡从小到大,已经发展成为大型产业投资集团,形成了“两主一翼”的产业格局,即“两主”为生命科技产业和养老产业,“一翼”

转载 猿渡静子:该如何告诉孩子关于死亡的事

原文地址:猿渡静子:该如何告诉孩子关于死亡的事作者:方陈  死亡是一种消失,永远的消失。因为不复存在,所以它总能让人感到极度的恐惧。虽然人们也知道,那是一种必然的结局,却希望那是遥远的,远到不愿去想它,极力回避它。  但活在如今这个

漂移车改装的那些事 二手漂移改装车出售

通过《头文字D》的电影和漫画,越来越多朋友开始对漂移这个特别的驾驶技术产生兴趣,在进弯之前把车子大角度横过来,轮胎狂转在地面划出浓烟,这是关于角度和烟雾的游戏。今天,我们就来聊一聊关于漂移的改装。● 漂移的两大因素现

声明:《关于robotium的那些事 robotium的优缺点》为网友一见钟脸分享!如侵犯到您的合法权益请联系我们删除