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的元素,你的印象会更加深刻的!

  • 相关阅读:
    Leetcode 121. Best Time to Buy and Sell Stock
    Leetcode 120. Triangle
    Leetcode 26. Remove Duplicates from Sorted Array
    Leetcode 767. Reorganize String
    Leetcode 6. ZigZag Conversion
    KMP HDU 1686 Oulipo
    多重背包 HDU 2844 Coins
    Line belt 三分嵌套
    三分板子 zoj 3203
    二分板子 poj 3122 pie
  • 原文地址:https://www.cnblogs.com/eagleking0318/p/6520836.html
Copyright © 2011-2022 走看看