zoukankan      html  css  js  c++  java
  • Robotium 第一天,HelloWorld

    前段时间用Appium写安卓的UI自动化脚本,总的来说还是很不错的,但是有以下几个限制:

    1. 中文输入问题,这个我用遍了网上的各种方法,都没能解决,真的是RP问题吗。。。
    2. 有些开发会在Activity里封装webview,对于这种场景,Appium除了坐标,没有其它的解决方案
    3. Appium无法处理toast消息
    4. 对于全局的alertDialog的处理也是很不给力,只能通过点击坐标来处理

    当然,这并不是说appium不好,这些只是我在写脚本中遇到的问题,appium的优点很多了,客户端语言没有限制(用自己熟悉的语言写脚本),基于Webdriver(这个真心的很强大),同时支持android和iOS。。。其它优点不再多说。带着appium给我的痛点,我把目光投向了另一个比较流行的自动化测试框架,Robotium。

    下面就是我的Robotium的第一天之旅:

    1. 环境搭建,之前用appium,所以JDK神马的都有了,再下载Robotium-solo.jar,基本上不需要再搞其它的了
    2. 工欲善其事,必先得其器,下来就是IDE的问题了,之前一直用的eclipse,但是通过网上的了解,一般人都用google的Android Studio,于是安装了Android Studio,接着问题就来了,这个IDE启动时强行更新SDK,各种网络连接不上啊,原因大家都懂的,那么还是换回eclipse吧,装ADT插件,这里又碰到了同样的问题,ADT也是google的,还是需要连他们的网络,无奈,只好FQ了,至此,环境、IDE都好了,就看怎么用了。
    3. 第一个Demo,测试AndroidCalculator,点击这里下载APK(这里是针对没有APK源码的情况,有源码的后续再单独写一篇)
      • 给应用签名,这里我们用debug模式来签名(关于APK签名,完全讲解看这里,后面有机会专门写篇blog介绍,今天主要是Hello World),这里会用到一个重新签名的工具 re-sign.jar,点击这里下载此工具,打开windows命令行,进入re-sign.jar所在的文件夹执行以下命令(这个命令会依赖$ANDROID_HOME oolszipalign.exe这个文件,我安装的SDK没有这个文件- -!,如果没有的话找别人要一个放在这个目录下即可):
        java -jar re-sign.jar

        这时会启动一个窗口,把需要签名的apk拖进去既可,如图,完了会生成一个AndroidCalculator-V1_0_debug.apk的文件

      • (此处,记住Package name 和 Main activity,后面写脚本的时候会用到)
      • 将签过名的apk装到手机或者模拟器上
        #进入到AndroidCalculator-V1_0_debug.apk所在的文件夹
        adb install AndroidCalculator-V1_0_debug.apk

        至此,准备工作都就绪了,下面开始创建项目

      4. 新建项目-其它-Android-Android Test Project,下面有一步比较重要

        

       这里选择This project,后面选择SDK版本,如果workspace为空,点finish后会报一个java.lang.NullPointerException的错误,原因是这是第一个工程,eclipse无法选择指定的资源(通俗点来讲就是,你创建了一个新测试工程,你选择创建的工程作为被测试工程,这时eclipse找不到这个工程,所以就报空指针异常了),解决办法有两种,重复上述步骤,再建立一个新的工程,并以新建的工程作为测试工程,另一种是在创建测试工程前先创建一个Android Project,然后再创建Android Test Project,此时也没有这个问题。

    5. 将下载下来的robotium-solo-x.y.jar加入到BuildPath中,这个很简单,但是有一点需要特别注意,在编辑BuildPath时,有一个Order and Export,选中robotium-solo-x.y.jar,然后点OK,否则在执行脚本时会报 java.lang.NoClassDefFoundError:com.jayway.android.robotium.solo.Solo

     

      6. 接下来就开始写脚本了,这个比较简单,先贴代码

     1 /**
     2  *
     3  * Created by zombie on 2015年1月30日
     4  * chen_peng06@163.com
     5  */
     6 package com.zombie.test;
     7 
     8 import android.test.ActivityInstrumentationTestCase2;
     9 
    10 import com.robotium.solo.Solo;
    11 
    12 
    13 /**
    14  * @author zombie
    15  *
    16  */
    17 public class CalculatorTest extends ActivityInstrumentationTestCase2 {
    18     private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "com.calculator.Main";
    19     private static Class laucherActivityClass;
    20 
    21     static {
    22         try {
    23             laucherActivityClass = Class
    24                     .forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
    25         } catch (ClassNotFoundException e) {
    26             throw new RuntimeException(e);
    27         }
    28     }
    29 
    30     @SuppressWarnings("unchecked")
    31     public CalculatorTest() {
    32         super(laucherActivityClass);
    33     }
    34 
    35     private Solo solo;
    36 
    37     @Override
    38     protected void setUp() {
    39         solo = new Solo(getInstrumentation(), getActivity());
    40     }
    41 
    42     public void testCalculator() {
    43         solo.clearEditText(0);
    44         solo.enterText(0, "10");
    45 
    46         solo.clearEditText(1);
    47         solo.enterText(1, "20");
    48 
    49         solo.clickOnButton("Multiply");
    50 
    51         assertTrue("Problem asserting multiply", solo.searchText("200"));
    52     }
    53 
    54     @Override
    55     public void tearDown() {
    56         solo.finishOpenedActivities();
    57     }
    58 }
    View Code

    看一下第18行,这里就用到了签名时生成的Main activity,这个是启动app的activity,这个脚本比较简单,今天主要是Hello world,后面分开讲具体的代码及API分析

    7.修改配置文件AndroidManifest.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     3     package="PACKAGE.test.test"
     4     android:versionCode="1"
     5     android:versionName="1.0" >
     6 
     7     <uses-sdk android:minSdkVersion="19" />
     8 
     9     <instrumentation
    10         android:name="android.test.InstrumentationTestRunner"
    11         android:targetPackage="com.calculator" />
    12 
    13     <application
    14         android:icon="@drawable/ic_launcher"
    15         android:label="@string/app_name" >
    16         <uses-library android:name="android.test.runner" />
    17     </application>
    18 
    19 </manifest>
    View Code

      看下第11行,这里就是我们重新签名时的Package name

    8.下面就可以直接执行用例了,右键 run as - Android JUnit Test

    至此一个简单的robotium入门程序就有了,后面会继续写有源代码的情况下如何创建工程以及robotium常用api分析

  • 相关阅读:
    1.20 测试嵌套对象使用Object.defineProperty是否有效?
    1.6 对象解构赋值机制
    12.26 sessionStorage与locaStorage的区别(作用域、生命周期)
    break,continue,return 区别
    过滤关键词
    ES6 笔记
    Cesium 学习笔记
    Cesium 学习笔记
    【vue】清理代码
    《CSS世界》读书笔记(十六)
  • 原文地址:https://www.cnblogs.com/qianyiliushang/p/4262853.html
Copyright © 2011-2022 走看看