第四章 Apk包测试用例编写

     在正常的测试流程中,我们测试人员是不会拿到被测试程序的源码的,只有生成的安装程序,也就是APPapk文件。此时,我们就无法按照有源码的时候再测试了。但是robotium也可以完美地解决这样的测试,本章将详细讲述。

4.1 测试前准备

在正式的测试工作开始之前,我们需要做一些儿准备,除了第二章我们讲解到的安装测试环境外,还需要以下操作:

(1)设置环境变量

A,配置ANDROID_HOME为android sdk的安卓目录,例如:D:\android-sdk

B,path下添加这两个:

%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;

(2)对安装文件签名

因为robotium要求被测应用和测试代码要有一致的签名, 所以我们需要把下载到的apk,通过re-sign.jar来产生debug keyapk,这个重新生成的apk就会跟测试项目签名一致了。

A,下载re-sign.jar

下载地址:http://www.troido.de/re-sign.jar

B,签名要安装的APK文件

在命令行下通过 java -jar re-sign.jar就会出现一个窗口,然后将apk文件(zc_android_3.6.apk,众筹网APP)拖到这个窗口中,就会自动生成一个debug keyapk

产生新apk的过程中会弹出一个信息框,如图4.1.1所示,保存这个图,因为里面有两个信息我们等会的代码中需要用到。

第四章 Apk包测试用例编写_第1张图片

图4.1.1 签名要安装的Apk

(3)安装签名后的apk

A,模拟器安装

打开模拟器(模拟器器一定要打开才能安装成功),然后打开命令行 adb install zc_android_3.6_debug.apk (新生成apk的名称) 或者双击apk文件也可以安装,安装成功就可以再模拟器里看到该应用的图标了。

B,真机安装

   如果使用真机的话,将手机连接到电脑,将签名后的app安装到手机上即可。可以用adb命令安装,也可以借助于91助手等软件安装。

4.2创建测试项目

   在第二章我们配置好了测试环境,加上上面我们设置了环境变量,那么下面我们就要创建我们的Robotium测试项目了。

(1)打开Eclipse,点击File->Newàothers…,然后在打开的对话框中选择“Android Test Project,如图4.2.1所示:

第四章 Apk包测试用例编写_第2张图片

图4.2.1 创建Android测试工程

(2)单击“next”后,在新窗口中输入工程名“ZhongChouDemo,然后再次单击”next”按钮。

(3)由于我们没有要测试App的源文件,所以在这个窗口中选择”This project”,如图4.2.2所示。

第四章 Apk包测试用例编写_第3张图片

图4.2.2 选择要测试的工程

(4)单击“Finish”后创建完成工程。

(5) 添加robotium包,右键单击刚刚创建的工程,ZhongChouDemo,然后选择“Build PathàConfigure Build Path…,打开“java build path”窗口。选择“libraries”选择卡,单击“Add External JARs”按钮,在打开的窗口中找到你要添加的Robotium-solo包。如图4.2.3所示:

第四章 Apk包测试用例编写_第4张图片

图4.2.3 添加Robotium包

(6)添加junit引用。右键单击刚刚创建的工程,ZhongChouDemo,然后选择“Build PathàConfigure Build Path…,打开“java build path”窗口。选择“libraries”选择卡,单击“Add Library…”按钮,在打开的窗口中选择“junit,然后选择“JUNIT 4”,单击finish,完成引用,如图4.2.4所示:

第四章 Apk包测试用例编写_第5张图片

图4.2.4 Junit4引用

(7)右键单击刚刚创建的工程,ZhongChouDemo,然后选择“Build PathàConfigure Build Path…,打开“java build path”窗口。选择“Order and Export”选择卡,选中刚刚添加的Robotium包和junit4,单击“OK”。如图4.2.5所示:

第四章 Apk包测试用例编写_第6张图片

图4.2.5 引用添加的包

(8)至此,测试工程创建完成,需要添加的包和引用也添加完成,最终结果如图4.2.6所示:

第四章 Apk包测试用例编写_第7张图片

图4.2.6 创建的测试工程

4.3 编写测试用例

    在我们刚刚创建完工程后,我们需要编写具体的测试用例。我们的测试用例是以众筹网的App为例的,下面我们分步讲解:

(1)设置Android API版本。打开EclipseàwindowsàAndroid SDK Manger,在打开的窗口中查看或是安装你测试机需要的Android API.如图4.3.1所示:由于我的测试机系统是Android4.4.2,所以我安装的是Andorid 4.4(API 19).

 

第四章 Apk包测试用例编写_第8张图片

图4.3.1 查看或安装Android API

打开工程中的project.properties文件,如果你创建的工程中没有这个文件,可以自己创建一个,将里面的target=android-X修改成你的版本号,例如我的则是:target=android-19,保存。

(2)配置AndroidManifest.xml文件。这个文件是非常重要的,至于作用是什么,请去网上查找,此处不再介绍。

A,修改主节点:给package起个名字,如“com.zhongchou.test”,版本号改成与你安装的APK版本号相同或是比较大的,APK版本号的查看方法见:http://blog.sina.com.cn/s/blog_68f262210102v7hj.html

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

    package="com.zhongchou.test"

    android:versionCode="36"

    android:versionName="3.6">

B,修改instrumentation节点:这个节点是配置我们要测试的APP的信息的,也是我们在上面重新签名的时候,弹出的对话框中显示package name。如:

<instrumentation

        android:name="android.test.InstrumentationTestRunner"

        android:targetPackage="com.subject.zhongchou"/>

当然要配置这个文件的过程中,你可能会遇到其他的问题,请参照我的博客内容,里面写到可能遇到的问题及解决方案。

(3)编写测试用例

下面创建我们的测试用例,我们的测试用例很简单,具体步骤如下:

Ø  打开众筹网App。

Ø  输入用户名及密码,登录。

Ø  检测登录是否成功。

Ø  退出App。

针对上面的测试步骤,结合Robotium的框架,我们编写测试用例如下:

package com.zhongchou.TestCases;

 

importstatic org.junit.Assert.*;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

 

importandroid.test.ActivityInstrumentationTestCase2;

import android.widget.EditText;

import android.widget.TextView;

import com.robotium.solo.Solo;

 

publicclassLoginTest extends  ActivityInstrumentationTestCase2{

       private Solo solo;

       /**

        * 注意以下两个静态常量字符串

       * 第一个是要测试的包名,和刚刚在AndroidMainfest里配置的包名一直

       * 第二是被测程序的入口类

       * 以下是众筹网的包名和入口类

       */

       privatestaticfinal String TARGET_PACKAGE_ID="com.subject.zhongchou";

       privatestaticfinal String LAUNCHER_ACTIVITY_FULL_CLASSNAME="com.subject.zhongchou.activity.SplashActivity";

       //声明一个Class类型的变量,用于ActivityInstrumentationTestCase2加载启动被测程序

       privatestatic ClasslauncherActivityClass;   

       //静态加载auncherActivityClass也就是被测程序主类

       static{

              try {

                     launcherActivityClass = Class

                                   .forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);

              } catch (ClassNotFoundException e) {

                     thrownewRuntimeException(e);

              }

       }

       //构造函数,传入TARGET_PACKAGE_ID,launcherActivityClass即可

       public LoginTest()

       {

              super(TARGET_PACKAGE_ID,launcherActivityClass);

       }

       @Before

       publicvoidsetUp() throws Exception {

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

       }

 

       @After

       publicvoidtearDown() throws Exception {

              solo.finishOpenedActivities();

       }

 

       @Test

       publicvoidtest_login() {

              /**

               * 登录功能测试

               */

              EditText editname=solo.getEditText(0);

              solo.enterText(editname, "183******05");

              EditText editpsd=solo.getEditText(1);

              solo.enterText(editpsd, "a0*****0");

              solo.sleep(1000);

              solo.clickOnButton("登录");

              solo.sleep(3000);

              //检测登录是否成功

              TextView view;

              view=(TextView)solo.getView("com.subject.zhongchou:id/txtHome");

              assertEquals("首页",view.getText());

              //退出

              solo.clickOnText("我的");

              solo.sleep(1000);

              solo.clickOnText("设置");

              solo.sleep(1000);

              solo.clickOnText("退出登录");

              solo.sleep(1000);

              solo.clickOnButton("确定");

              solo.sleep(3000);

              

       } 

 

}

代码讲解:

(a)添加常用的引用,继承类ActivityInstrumentationTestCase2,创建自己的测试用例类。

(b)接下来是一些儿静态声明,这些儿结构是固定的。其中的TARGET_PACKAGE_ID和LAUNCHER_ACTIVITY_FULL_CLASSNAME是我们在对测试的App签名的时候提示的两个值。

(c) 编写测试用例函数,test_login(),必须以test开头,否则android junit test识别不出测试用例函数。

(d)测试用例是先定位用户名和密码的EditText,然后输入用户名和密码。然后单击登录按钮,判断是否登录成功,我们检测首页选项卡是否出现,出现后证明成功。然后按App的操作步骤 ,执行退出操作。

(e) 在每个操作步骤之间,加上停顿sleep(),防止因为程序执行过快,检测不到要检测的元素,这在自动化操作中非常重要。

 

(4)运行测试用例

在测试用例文件上右击,选择run asà android junittest,就可以进行测试了。运行结束,在Eclipse左右会显示运行结果,如图4.3.2所示,如果出错,可以去查看logcat,排查错误的原因。

第四章 Apk包测试用例编写_第9张图片

图4.3.2 测试用例运行结果

4.4 本章小结

       本章我们讲解了在没有源码的情况下,我们如何编写自动化测试用例。并通过众筹网的登录测试用例,分步讲解了测试用例的编写过程。通过本章的讲解,我们可以编写自己的测试用例,但是你或许有个疑问,我们如何去定位App的元素啊?教程中好像没有讲到啊?这是我故意安排的,在你对测试用例有一个认识后,我们再去讲解如何定位App的元素,你的印象会更加深刻的!

你可能感兴趣的:(第四章 Apk包测试用例编写)