zoukankan      html  css  js  c++  java
  • 第四章 Apk包测试用例编写(下)

    ------手机自动化测试之Robotium

    4.3 编写测试用例

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

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

     

    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

    <</SPAN>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。如:

    <</SPAN>instrumentation

            android:name="android.test.InstrumentationTestRunner"

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

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

    (3)编写测试用例

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

    Ø  打开众筹网App

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

    Ø  检测登录是否成功。

    Ø  退出App

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

    package com.zhongchou.TestCases;

     

    import static org.junit.Assert.*;

    import org.junit.After;

    import org.junit.Before;

    import org.junit.Test;

     

    import android.test.ActivityInstrumentationTestCase2;

    import android.widget.EditText;

    import android.widget.TextView;

    import com.robotium.solo.Solo;

     

    public class LoginTest extends  ActivityInstrumentationTestCase2 {

           private Solo solo;

          

           private static final String TARGET_PACKAGE_ID="com.subject.zhongchou";

           private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME="com.subject.zhongchou.activity.SplashActivity";

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

           private static Class launcherActivityClass;  

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

           static{

                  try {

                         launcherActivityClass = Class

                                       .forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);

                  } catch (ClassNotFoundException e) {

                         throw new RuntimeException(e);

                  }

           }

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

           public LoginTest()

           {

                  super(TARGET_PACKAGE_ID,launcherActivityClass);

           }

           @Before

           public void setUp() throws Exception {

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

           }

     

           @After

           public void tearDown() throws Exception {

                  solo.finishOpenedActivities();

           }

     

           @Test

           public void test_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_IDLAUNCHER_ACTIVITY_FULL_CLASSNAME是我们在对测试的App签名的时候提示的两个值。

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

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

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

     

    (4)运行测试用例

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

     

    4.3.2 测试用例运行结果

    4.4 本章小结

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

  • 相关阅读:
    关联A850刷机包 高级电源 时间中心 优化 ROOT 动力 美化 简化
    CodeForces 425E Sereja and Sets
    int有符号和无符号类型内存 -- C
    软件体系结构————防御性编程
    Hibernate各保存方法之间的差 (save,persist,update,saveOrUpdte,merge,flush,lock)等一下
    椭圆识别
    UVa 10223
    照片详细解释YUV420数据格式
    LeetCode:Reverse Integer
    看了此文你还不懂傅里叶变换,那就来掐我吧
  • 原文地址:https://www.cnblogs.com/eagleking0318/p/6520836.html
Copyright © 2011-2022 走看看