Android自动化测试之Robotium学习(三)
2016-05-31 17:20
567 查看
导入好robotium包之后,我们就可以在自己的工程中新建测试类进行测试。下面以我们开始建的RobotiumTest项目为例进行说明。
代码如下:
package com.android.adb.test;
import com.jayway.android.robotium.solo.Solo;
import android.test.ActivityInstrumentationTestCase2;
public class TestRobotium extends ActivityInstrumentationTestCase2
{
//此处为你要测试的apk的包名,这里我测得是豌豆荚2
private static final String TARGET_PACKAGE_ID ="com.wandoujia.phoenix2";
//此处的classname是你要测得apk的主类名,也就是进入apk第一个activity的类名
private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME ="com.wandoujia.phoenix2.NewWelcomeActivity";
private static Class<?> launcherActivityClass;
// 定义一个休眠时间 2000毫秒
private static final int Sleeptime1 = 2000;
static
{
try
{
launcherActivityClass = Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
}
catch(ClassNotFoundException e)
{
throw new RuntimeException(e);
}
}
@SuppressWarnings("unchecked")
//创建与测试类同名的构造方法
public TestRobotium()
{
super(TARGET_PACKAGE_ID,launcherActivityClass);
}
//定义一个Solo对象
private Solo solo;
protected void setUp()throws Exception
{
//创建进入测试apk界面的方法
solo= new Solo(getInstrumentation(),getActivity());
}
//这是自己定义的一个测试case,只是简单进入界面,点击一下两个选项
public void test_Watch_001(){
solo.sleep(Sleeptime1);
solo.clickOnText("管理");
solo.sleep(Sleeptime1);
solo.clickOnText("连接");
solo.goBack();
}
//测试类结束的方法
public void tearDown()throws Exception
{
try
{
solo.finalize();
}
catch(Throwable e)
{
e.printStackTrace();
}
getActivity().finish();
super.tearDown();
}
}
这是我以自己下载的豌豆荚apk为测试例子,里面的注释已经很清楚了,除了一个自己写的测试case外,其他的几个方法,像TestRobotium()、setUp()、tearDown()方法,都是测试必须的。
这里主要说明的就是,你要找到你要测试的apk的包名和主类名,这个是必须的,没有源码可以,但是你要找不到这两个,你的robotium测试就进行不下 去了。如果你没有源码时,仅有一个apk,怎样找到这个apk的包名和主类名呢,有两种方法,先放在这里,稍后再说。
主类配置好后,你的robotium测试程序配置还没有完成,还需要配置一下你的测试程序的AndroidManifest.xml文件,这个大家肯定很熟悉了。
下面是我的文件代码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.adb.test"
android:versionCode="1"
android:versionName="1.0" >
<!-- 最小的api版本 -->
<uses-sdk android:minSdkVersion="14" />
<!-- 添加这一句是减少一些控件点击失效的情况 -->
<supports-screens android:anyDensity="true" />
<!-- 下面的配置是关键,正确填写你要测试的apk的包名-->
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.wandoujia.phoenix2" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<!-- 引用android中测试的包 -->
<uses-library android:name="android.test.runner" />
</application>
</manifest>
同样,代码已经给出了注释,这里最要注意的,也是要正确添加你要测试的包名,以及引用robotium测试包。
这个程序的配置是最基础的,是每个robotium测试程序必须有的,其他的不同就是根据你测试的apk不同,书写不同的测试case了。
配置好之后,就可以选中你的项目,右键,点击“Run as”选项,然后选择“Android Junit Test”选项,(不是“Android Application”选项),然后开始进行测试了。
注意!注意!这里有两个前提:一、你的模拟器或着真机中已经安装了这个你要测试的apk。(我的是豌豆荚)。二、你的apk已经去过签名了,并且使用的是debug签名,否则除非你知道你要测试程序的原始签名是什么。
关于签名,这也是一个很重要的问题,等到下篇进行详解。这里给出两张上面的豌豆荚Robotium case运行成功的图片:
![](http://image78.360doc.com/DownloadImg/2014/09/0508/44895954_1.jpg)
(case中的点击“管理”选项)
![](http://image78.360doc.com/DownloadImg/2014/09/0508/44895954_2.jpg)
代码如下:
package com.android.adb.test;
import com.jayway.android.robotium.solo.Solo;
import android.test.ActivityInstrumentationTestCase2;
public class TestRobotium extends ActivityInstrumentationTestCase2
{
//此处为你要测试的apk的包名,这里我测得是豌豆荚2
private static final String TARGET_PACKAGE_ID ="com.wandoujia.phoenix2";
//此处的classname是你要测得apk的主类名,也就是进入apk第一个activity的类名
private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME ="com.wandoujia.phoenix2.NewWelcomeActivity";
private static Class<?> launcherActivityClass;
// 定义一个休眠时间 2000毫秒
private static final int Sleeptime1 = 2000;
static
{
try
{
launcherActivityClass = Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
}
catch(ClassNotFoundException e)
{
throw new RuntimeException(e);
}
}
@SuppressWarnings("unchecked")
//创建与测试类同名的构造方法
public TestRobotium()
{
super(TARGET_PACKAGE_ID,launcherActivityClass);
}
//定义一个Solo对象
private Solo solo;
protected void setUp()throws Exception
{
//创建进入测试apk界面的方法
solo= new Solo(getInstrumentation(),getActivity());
}
//这是自己定义的一个测试case,只是简单进入界面,点击一下两个选项
public void test_Watch_001(){
solo.sleep(Sleeptime1);
solo.clickOnText("管理");
solo.sleep(Sleeptime1);
solo.clickOnText("连接");
solo.goBack();
}
//测试类结束的方法
public void tearDown()throws Exception
{
try
{
solo.finalize();
}
catch(Throwable e)
{
e.printStackTrace();
}
getActivity().finish();
super.tearDown();
}
}
这是我以自己下载的豌豆荚apk为测试例子,里面的注释已经很清楚了,除了一个自己写的测试case外,其他的几个方法,像TestRobotium()、setUp()、tearDown()方法,都是测试必须的。
这里主要说明的就是,你要找到你要测试的apk的包名和主类名,这个是必须的,没有源码可以,但是你要找不到这两个,你的robotium测试就进行不下 去了。如果你没有源码时,仅有一个apk,怎样找到这个apk的包名和主类名呢,有两种方法,先放在这里,稍后再说。
主类配置好后,你的robotium测试程序配置还没有完成,还需要配置一下你的测试程序的AndroidManifest.xml文件,这个大家肯定很熟悉了。
下面是我的文件代码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.adb.test"
android:versionCode="1"
android:versionName="1.0" >
<!-- 最小的api版本 -->
<uses-sdk android:minSdkVersion="14" />
<!-- 添加这一句是减少一些控件点击失效的情况 -->
<supports-screens android:anyDensity="true" />
<!-- 下面的配置是关键,正确填写你要测试的apk的包名-->
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.wandoujia.phoenix2" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<!-- 引用android中测试的包 -->
<uses-library android:name="android.test.runner" />
</application>
</manifest>
同样,代码已经给出了注释,这里最要注意的,也是要正确添加你要测试的包名,以及引用robotium测试包。
这个程序的配置是最基础的,是每个robotium测试程序必须有的,其他的不同就是根据你测试的apk不同,书写不同的测试case了。
配置好之后,就可以选中你的项目,右键,点击“Run as”选项,然后选择“Android Junit Test”选项,(不是“Android Application”选项),然后开始进行测试了。
注意!注意!这里有两个前提:一、你的模拟器或着真机中已经安装了这个你要测试的apk。(我的是豌豆荚)。二、你的apk已经去过签名了,并且使用的是debug签名,否则除非你知道你要测试程序的原始签名是什么。
关于签名,这也是一个很重要的问题,等到下篇进行详解。这里给出两张上面的豌豆荚Robotium case运行成功的图片:
![](http://image78.360doc.com/DownloadImg/2014/09/0508/44895954_1.jpg)
(case中的点击“管理”选项)
![](http://image78.360doc.com/DownloadImg/2014/09/0508/44895954_2.jpg)
相关文章推荐
- Android Studio IDE 简单学习和介绍
- Android中Listview设置footerView后不展示的问题原因探究
- 使用CMake进行android native开发
- android:configChanges="screenSize | orientation | keyboardHidden"
- Android自动化测试之Robotium学习(二)
- Android发送邮件到指定邮箱(可带附件)
- Android自动化测试之Robotium学习(一)
- Android精炼实用的基础框架分享[Agility]
- android 基础 json解析Gson
- 【转】Android中JNI的使用方法
- Android--从零单排系列(3)--文件读写的操作
- Android 5.0+ 自定义普通按钮的ripple波纹效果
- Android 6.0运行时权限
- Android应对进程被杀死--Service(二)
- 关于软件盘弹与不弹的问题
- Android跑马灯效果
- Android Bundle知识小梳理
- 在内部存储写文件
- 1.ormlite 学习笔记
- Android 上自定义的复式折线图(一)