Android测试详解——单元测试和云测试

       写博客辛苦了,转载的朋友请注明出处哦,finddreams:(http://blog.csdn.net/finddreams/article/details/41120607

       一个APP软件开发的一般流程:需求分析——设计文档——建立模型——功能实现——测试修改——发布。 

       记得有一篇文章说过,做一个APP的开发周期最好是控制在三个月内,花3个月的时间开发,先打入市场,收集回馈再加以改善。其中时间安排是开发为一个月,而测试和调整则需要两个月。

       测试是软件开发中非常重要的一环,对于我们的APP开发也同样如此。但对于初学者,我们不是很清楚测试该如何做,下面就给大家介绍一下Android开发的测试:

       一.单元测试

       任何程序的开发都离不开单元测试来保证其健壮和稳定。Android程序自然也不例外。从Android SDK 0.9开始,就有了比较成熟的测试框架,但是直到目前最新的1.1版本,也没有详细的文档介绍这个内容。所以今天我就给大家总结一下:


       1.JUnit     

        做过Java开发的人都知道JUnit是用来做单元测试的,JUnit是指从Apache基金会下载的junit.jar里提供的一系列单元测试功能。Android是基于Java的,所以测试框架的特性也是基于JUnit。使用JUnit测试框架,是正规Android开发的必用技术,在JUnit中可以得到组件,可以模拟发送事件和检测程序处理的正确性。单元测试是嵌入到项目中,也可以作为一个单独的项目针对某个具体项目进行测试。


       2.单独的测试项目

       在Eclipse中新建一个单元测试项目,点击下一步,填写工程名。

                                           

       

      然后在下一步的时候需要你选择一个测试的目标工程,可以选择另外一个项目,也可以只在本项目中测试。他们的区别是选择另外一个项目可以测试其他项目中的数据。

                                         

 

       完成后,如果选择测试其他项目我们可以在AndroidManifest.xml文件中可以看到如下内容:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.finddreams.blacknum.test"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk android:minSdkVersion="8" />
    
    <instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.finddreams.blacknum" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <uses-library android:name="android.test.runner" />
    </application>

</manifest>

       如果是选择自身做完测试项目,就会看到

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.finddreams.test"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk android:minSdkVersion="10" />

    <instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.finddreams.test" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <uses-library android:name="android.test.runner" />
    </application>

</manifest>

       为了测试我们先创建一个简单点类,主要功能是打印出测试通过log:

package com.finddreams.test;

import android.util.Log;

public class AppDemo {

	public void testMethod(){
		Log.i("Tag", "测试通过");
	}
}

 

       接下来是创建测试类,测试的类要继承android.test.AndroidTestCase  代码如下:

package com.finddreams.test;

import android.test.AndroidTestCase;

public class AppTest extends AndroidTestCase{

	public void test(){
		AppDemo demo =new AppDemo();
		demo.testMethod();
	}

}


      然后点击右键Run As 选择Android JUnit Test 运行,就可以在右侧看到结果了:

                                           

          绿色条表示成功,如果出现了红色条,表示出血了,程序有错误,需要及时改正过来。

 

       3.嵌入式的测试

       把测试框架嵌入到自己项目中去,其实也很简单,只需要在AndroidManifest.xml中加入如下代码就可以了:

  1.  <instrumentation  
  2.         android:name="android.test.InstrumentationTestRunner"  
  3.         android:targetPackage="com.finddreams.blacknum" />  
  1.  <application  
  2.         android:icon="@drawable/ic_launcher"  
  3.         android:label="@string/app_name" >  
  4.         <uses-library android:name="android.test.runner" />  
  5.     </application>  

      如果你不记得怎么写的话,可以先按照第一步来建一个独立的测试项目,就能够在AndroidManifest.xml中找到如上代码,复制粘贴到自己的工程中去。注意:android:targetPackage    必须换成你所要测试项目的包名。


      测试中的几个知识点:

       TestCase     基类:

       TestCase  这个类用于在Android担当所有独特的TestCase的基类的作用,它是一个Abstract Class。

       包含访问系统对象(如Context)的方法。使用Context,你可以浏览资源,文件,数据库等等;

        ——ApplicationTestCase

                测试整个应用程序的类。它允许你注入一个模拟的Context到应用程序中,在应用程序启动之前初始化测试参数,并在应用程序结束之后销毁之前检查应用程序;

       ——ProviderTestCase2

               测试单个ContentProvider的类。因为它要求使用MockContentResolver,并注入一个IsolatedContext,因此Provider的测试是与OS孤立的;

       —— ServiceTestCase

               测试单个Service的类。你可以注入一个模拟的Context或模拟的Application(或者两者),或者让Android为你提供Context和MockApplication;

       ——ActivityTestCase

              Activity测试类的基类。我们测试activity时就是继承了这个类来编写一个自己的测试类进行测试,也是项目当中最长用到的。


       二、云测试

       目前对移动App的测试主要指的是下面几部分:

       1.功能测试。遍历应用的每一个角落,查看应用的功能、逻辑是否正常。
       2.性能测试。应用的性能怎样,如启动时间、反应时间等。
       3.兼容性测试。对不同目标终端设备、操作系统版本的兼容性测试。

       第一个功能测试,是属于测试人员查看功能模块,来发现功能缺陷。但对于第二、三点有时候我们仅凭测试人员有限的时间和精力是难以测试出来的。随着移动设备、操作系统版本的碎片化,不同的Android系统版本,不同的屏幕尺寸,分辨率,给测试带来了极大的不便。
       云测试因此孕育而生,所谓云测试是指开发者将App上传之后,在服务器端的自动化测试环境中部署和测试,相比开发者自己测试来说有很多优点,比如不用购买真机,无需部署运维等。比较普遍的使用的有Testin云测和百度云众测等等。

        Testin


       Testin云测试是首家面向全球提供免费App真机自动化云测试服务平台,基于云端部署超过300款、3000部主流智能移动设备,可实现自定义终端进行批量自动化兼容适配测试以及功能、性能、稳定性测试。已累计帮助移动开发者测试App应用700多万次。极大的减少大量重复、枯燥的人力测试工作;节省测试终端的租用、购买成本。

       Testin特性
       真机测试:终端云 节省测试设备购买租赁成本
       Testin云测试基于云端部署超过300款3000多部主流的Pad、Phone、Touch、Smart TV等智能移动设备,实时上架最新终端,免去测试终端的购买、租赁等诸多烦恼。
       自动化测试:高效率 节省测试人员成本及时间
       彻底告别原始的人工测试,5分钟内自动完成安装/卸载、启动/运行、UI适配等枯燥手工测试,保障App应用高质量快速迭代,按期发布最新版本。
     
       测试类型
1)兼容测试
①安装卸载测试:测试App在指定终端上是否可正常安装、正常卸载,准确定位错误原因。
②遍历测试:自动识别App可执行的功能,在一定时间内遍历App的不同功能界面,通过截图记录操作路径 并输出日志、定位异常现象。
③运行稳定性测试:类似Monkey的随机性压力测试,测试App运行期的稳定性。
④UI适配测试:测试App的UI与目标终端的屏幕是否适配,记录是否存在渲染失败、错位、黑边框、黑白屏等现象。
 
 2)性能测试
①启动时间检测:检测App在终端上首次启动时间。
②内存、CPU耗用检测:检测App在终端上运行时不同时段占用内存、CPU情况。
③流量耗用检测:检测App在终端上运行时的网络流量消耗情况。
④电池温度检测:检测App在终端上运行时,对终端的电池温度等性能指标的影响情况。

  3)功能测试
①自定义脚本测试:上传自定义脚本,脚本中给出准确的测试方法,能自动定位错误及反馈出错原因,能在结果报告中呈现测试过程出现的bug并提供重现步骤。利用JUnit快速定位代码错误,帮助您正确改善产品质量。
②执行结果判定:比对每个用例的测试结果,未通过用例给出准确的日志分析。
③支持Robotium、淘宝Athrun框架:支持Robotium、淘宝Athrun框架编写的自动化测试脚本。
       
       
        云测试还有百度云,易测云都是蛮不错的,既可以为应用测试,同时也能为手游进行测试,并能够为手游录像等等。
      我想说的是现在对开发者来说是个很好的时机,我们APP中需要的功能很多已经有人做好了,比如推送啊,一键分享啊,地图导航啊,以及即时通讯啊,甚至于服务器端的功能人家也都做好了,把我们从服务端中解放出来(具体可以看我的另一篇文章《 

BaaS让你快速开发APP,和服务端说再见

》)。程序员中说的最多的一句话就是“不要重复造轮子”,前辈们已经做得很完善的事情,我们只需拿来就用,这给我们开发提供了极大的便利。

        今天就先和大家聊到这里,以后我会给大家介绍一下关于如何使用第三方平台的现有功能集成到自己的项目当中,请关注我后期的更新,谢谢!
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值