`
yanghaoli
  • 浏览: 284152 次
社区版块
存档分类
最新评论

android sdk 接口测试

 
阅读更多

最近接触到了第一个安卓项目,是关于安卓的接口测试的。于是呼一通找资料,看了五花八门的文章、文档,但是并没有非常适合的。

现在决定把学习的过程写下来,如果能帮到一两个跟我一样情况的就很开心了,开始学着记录学习笔记。

 Android提供了一系列强大的测试工具,它针对Android的环境,扩展了JUnit测试框架。允许你为应用程序的各个方面进行更为复杂的测试,包括单元层面及框架层面。

Android测试工具包含几个包:android.test, android.test.mock, android.test.suitebuilder, 这里面最重要的包是android.test。

我们来看android.test 的包里面的类的关系:

 

可以看出这里面的类分两个体系, 

androidTestCase 体系

继承自JUnit的TestCase,不能使用Instrumentation框架。但这些类包含访问系统对象(如Context)的方法。使用Context,你可以浏览资源,文件,数据库等等。基类是AndroidTestCase,一般常见的是它的子类,和特定组件关联。

子类有:

  • ApplicationTestCase——测试整个应用程序的类。它允许你注入一个模拟的Context到应用程序中,在应用程序启动之前初始化测试参数,并在应用程序结束之后销毁之前检查应用程序。
  • ProviderTestCase2——测试单个ContentProvider的类。因为它要求使用MockContentResolver,并注入一个IsolatedContext,因此Provider的测试是与OS孤立的。
  • ServiceTestCase——测试单个Service的类。你可以注入一个模拟的Context或模拟的Application(或者两者),或者让Android为你提供Context和MockApplication。

Instrumentation 体系

继承自JUnit TestCase类,并可以使用Instrumentation框架,用于测试Activity。使用Instrumentation,Android可以向程序发送事件来自动进行UI测试,并可以精确控制Activity的启动,监测Activity生命周期的状态。

基类是InstrumentationTestCase。它的所有子类都能发送按键或触摸事件给UI。子类还可以注入一个模拟的Intent。

子类有:

  •    ActivityTestCase——Activity测试类的基类。
  •    SingleLaunchActivityTestCase——测试单个Activity的类。它能触发一次setup()和tearDown(),而不是每个方法调用时都触发。如果你的测试方法都是针对同一个Activity的话,那就使用它吧。
  •    SyncBaseInstrumentation——测试Content Provider同步性的类。它使用Instrumentation在启动测试同步性之前取消已经存在的同步对象。
  •    ActivityUnitTestCase——对单个Activity进行单一测试的类。使用它,你可以注入模拟的Context或Application,或者两者。它用于对Activity进行单元测试。

不同于其它的Instrumentation类,这个测试类不能注入模拟的Intent。

  •    ActivityInstrumentationTestCase2——在正常的系统环境中测试单个Activity的类。你不能注入一个模拟的Context,但你可以注入一个模拟的Intent。另外,你还可以在UI线程(应用程序的主线程)运行测试方法,并且可以给应用程序UI发送按键及触摸事件。

可以看这两个的区别, androidTestCase的适用于与activity无关的测试, 如程序逻辑, instrumentation适用于acitivity的测试。

先引用下网上的例子:

1.首先建立一个Android project,类名为Sample,代码如下:

package com.hustophone.sample;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
 
public class Sample extends Activity {
    private TextView myText = null;
    private Button button = null;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        myText = (TextView) findViewById(R.id.text1);
        button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                myText.setText("Hello Android");
            }
        });
    }
 
    public int add(int i, int j) {
        return (i + j);
    }
}

这个程序的功能比较简单,点击按钮之后,TextView的内容由Hello变为Hello Android.同时,在这个类中,我还写了一个简单的add方法,没有被调用,仅供测试而已。

2. 在src文件夹中添加一个测试包,在测试包中添加一个测试类SampleTest

测试类的代码如下:

package com.hustophone.sample.test;
 
import com.hustophone.sample.R;
import com.hustophone.sample.Sample;
import android.content.Intent;
import android.os.SystemClock;
import android.test.InstrumentationTestCase;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;
 
public class SampleTest extends InstrumentationTestCase {
    private Sample sample = null;
    private Button button = null;
    private TextView text = null;
 
    /*
     * 初始设置
     * @see junit.framework.TestCase#setUp()
     */
    @Override
    protected void setUp()  {
        try {
            super.setUp();
        } catch (Exception e) {
            e.printStackTrace();
        }
        Intent intent = new Intent();
        intent.setClassName("com.hustophone.sample", Sample.class.getName());
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        sample = (Sample) getInstrumentation().startActivitySync(intent);
        text = (TextView) sample.findViewById(R.id.text1);
        button = (Button) sample.findViewById(R.id.button1);
    }
 
    /*
     * 垃圾清理与资源回收
     * @see android.test.InstrumentationTestCase#tearDown()
     */
    @Override
    protected void tearDown()  {
        sample.finish();
        try {
            super.tearDown();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    /*
     * 活动功能测试
     */
    public void testActivity() throws Exception {
        Log.v("testActivity", "test the Activity");
        SystemClock.sleep(1500);
        getInstrumentation().runOnMainSync(new PerformClick(button));
        SystemClock.sleep(3000);
        assertEquals("Hello Android", text.getText().toString());
    }
 
    /*
     * 模拟按钮点击的接口
     */
    private class PerformClick implements Runnable {
        Button btn;
        public PerformClick(Button button) {
            btn = button;
        }
 
        public void run() {
            btn.performClick();
        }
    }
 
    /*
     * 测试类中的方法
     */
    public void testAdd() throws Exception{
        String tag = "testAdd";
        Log.v(tag, "test the method");
        int test = sample.add(1, 1);
        assertEquals(2, test);
    }
}

下面来简单讲解一下代码:
setUp()和tearDown()都是受保护的方法,通过继承可以覆写这些方法。

在android Developer中有如下的解释
protected void setUp ()
Since: API Level 3
Sets up the fixture, for example, open a network connection. This method is called before a test is executed.

protected void tearDown ()
Since: API Level 3
Make sure all resources are cleaned up and garbage collected before moving on to the next test. Subclasses that override this method should make sure they call super.tearDown() at the end of the overriding method.

setUp ()用来初始设置,如启动一个Activity,初始化资源等。
tearDown ()则用来垃圾清理与资源回收。

在testActivity()这个测试方法中,我模拟了一个按钮点击事件,然后来判断程序是否按照预期的执行。在这里PerformClick这个方法继承了Runnable接口,通过新的线程来执行模拟事件,之所以这么做,是因为如果直接在UI线程中运行可能会阻滞UI线程。

2.要想正确地执行测试,还需要修改AndroidManifest.xml这个文件.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.hustophone.sample" android:versionCode="1"
    android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <!--用于引入测试库-->
        <uses-library android:name="android.test.runner" />
        <activity android:name=".Sample" android:label="@string/app_name">
           <intent-filter>
              <action android:name="android.intent.action.MAIN" />
              <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
    </application>
 
    <uses-sdk android:minSdkVersion="3" />
    <!--表示被测试的目标包与instrumentation的名称。-->
    <instrumentation android:targetPackage="com.hustophone.sample" android:name="android.test.InstrumentationTestRunner" />
</manifest>

 

经过以上步骤,下面可以开始测试了。测试方法也有以下几种,下面介绍两个常用的方法:

(1) 用Eclipse集成的JUnit工具
在Eclipse中选择工程Sample,单击右键,在Run as子菜单选项中选择Android JUnit Test

同时可以通过LogCat工具查看信息

(2) 使用Intellij IDEA 或者Android studio

右键点击你的测试工程,或者测试类, 选择Run,然后选择机器人图标的那个选项,窗口和Eclipse的差不多,

使用LogCat查看信息。

 

1
0
分享到:
评论

相关推荐

    [14本经典Android开发教程]-3-Android SDK 中文开发文档

    平台上使用JaVa语言进行Android应用开发必须的工具和API接口。 特性 · 应用程序框架 支持组件的重用与替换 · Dalvik 虚拟机 专为移动设备优化 · 集成的浏览器 基于开源的WebKit 引擎 · 优化的图形库 包括定制的...

    AshenAndroid:HTTP测试Android SDK

    寻找其他的测试手段,先将SDK集成到demo中,demo内置一个HTTP服务器,demo启动时反射扫描被测的SDK类,启动HTTP服务器,测试人员以约定的参数格式发送HTTP请求到demo的服务器,服务器反射调用SDK对应的接口,返回...

    顶尖电子秤接口,进过测试,可用

    顶尖电子秤接口,进过测试,可用

    Tiny4412 Android硬件开发指南 (含示例源代码)

    1.2 步骤二:下载并安装ADT集成开发环境和ANDROID SDK - 6 - 1.2.1 下载Android SDK (API 17) - 7 - 1.2.2 启动ADT集成开发环境 (Android Developer Tools) - 8 - 1.3 步骤三:创建ANDROID模拟器 - 9 - 1.4 步骤四:...

    Android代码-一个经过充分测试和线上验证的Android客户端自定义数据埋点SDK

    JJEvent 一个可靠的Android端数据埋点SDK 本文是原理介绍 这里是如何使用传送门 这里是源码地址 V1.0.0功能列表 是否支持 接口自定义 支持 缓存策略 支持 外部cookie注入 支持 推送周期设定 ...

    完整客户端SDKDemo程序

    1)支持人、组创建与管理,支持音频下载与远程、本地播放; 2)支持android,windows,linux系统;...3)提供标准SDK接口进行二次集成开发,简单、实用; 4)集群对讲技术,支持单呼、组呼、优先级抢呼 5)服务端单独提供

    Android开发案例驱动教程 配套代码

    2.2.2 Android SDK版本说明 10 2.2.3 ADT配置 10 2.3 Android开发模拟器 11 2.3.1 创建模拟器 11 2.3.2 启动模拟器 13 2.3.3 键盘映射与模拟器控制 13 2.3.4 横屏与竖屏切换 14 第3章 第一个Android程序 15 ...

    platform-tools_windows_linux_darwin_r29.0.6.7z

    android sdk里的各目录作用 AVD Manager.exe:虚拟机管理工具,用于建立和管理虚拟机。 SDK Manager.exe:sdk管理工具,用于管理、下载sdk、sdk工具,能及扩展工具 tools目录:包括测试、调试、第三方工具...

    Android platform-tools

    android sdk里的各目录作用 AVD Manager.exe:虚拟机管理工具,用于建立和管理虚拟机。 SDK Manager.exe:sdk管理工具,用于管理、下载sdk、sdk工具,能及扩展工具 tools目录:包括测试、调试、第三方工具。...

    新版Android开发教程.rar

    的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...

    superpay-android-sdk:superpay聚合支付

    superPay Android SDK目录简介本项目为支付sdk的示例项目。版本要求Android SDK 要求 Android 4.4 及以上版本请使用 Java 8 或以上版本快速体验Android Studio导入 superpay-android-sdk 整个项目,修改成自己的微信...

    2018第四届中国移动互联网测试开发大会PPT-3

    互联网测试:接口测试、白盒测试 移动互联网测试:通用app测试、微信小程序测试 物联网(IOT):车联网、智能家居、智能穿戴、机器人、机顶盒、工业app 互联网金融测试 视频与语音测试 游戏测试 新方向测试、大数据...

    2018第四届中国移动互联网测试开发大会PPT-2

    互联网测试:接口测试、白盒测试 移动互联网测试:通用app测试、微信小程序测试 物联网(IOT):车联网、智能家居、智能穿戴、机器人、机顶盒、工业app 互联网金融测试 视频与语音测试 游戏测试 新方向测试、大数据...

    2018第四届中国移动互联网测试开发大会PPT-1

    互联网测试:接口测试、白盒测试 移动互联网测试:通用app测试、微信小程序测试 物联网(IOT):车联网、智能家居、智能穿戴、机器人、机顶盒、工业app 互联网金融测试 视频与语音测试 游戏测试 新方向测试、大数据...

    自定义统计SDKTcStatInterface.zip

    统计服务AndroidSDK所有的接口都封装在TcStatInterface抽象类的静态方法中,主要功能接口请参考第3节API说明。应用在启动时,需要调用 initialize方法来初始化统计服务,之后便可按照统计的业务需求,调用统计数据...

    Google Android手机游戏设计达人讲座

    Android SDK提供了一些开发接口供开发组件,需要采用java语言开发,将现在排名第一的开发语言的开发者全部囊括在它的覆盖之下。java开发者可以很轻松地上手学习Android编程,为Android系统市场提供了丰富的应用软件...

    大华乐橙SDK

    大华乐橙SDK;LechangeSDK。含有源代码,android和ios都有,经测试可用

    tuyasmart_home_android_sdk

    涂鸦智能Android SDK点击查看中文版:功能概述Tuya Smart APP SDK提供了用于与硬件和Tuya Cloud进行通信的接口程序包,以加快应用程序开发过程SDK包含以下功能: 帐户系统(电话号码,电子邮件注册,登录名,密码重...

    Android应用程序开发教程PDF电子书完整版、Android开发学习教程

    的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...

    《Android应用开发揭秘》附带光盘代码.

     2.2.3 SDK和ADT的安装和  配置  2.3 创建第一个Android项目——HeUoAndroid  2.3.1 创建HelloAndroid项目  2.3.2 运行HelloAndroid及模拟器的使用  2.3.3 调试HelloAndroid  2.4 小结  第二部分 基础篇  ...

Global site tag (gtag.js) - Google Analytics