zoukankan      html  css  js  c++  java
  • Robotium自动化测试框架实用教程(图)

    一、简介

    Robotium是一款国外的Android自动化测试框架,主要针对Android平台的应用进行黑盒自动化测试,它提供了模拟各种手势操作(点击、长按、滑动等)、查找和断言机制的API,能够对各种控件进行操作。Robotium结合Android官方提供的测试框架达到对应用程序进行自动化的测试。另外,Robotium 4.0版本已经支持对WebView的操作。Robotium 对Activity,Dialog,Toast,Menu 都是支持的。

    二、相关下载

    源码获取:http://code.google.com/p/robotium/

    源API文档:http://robotium.googlecode.com/svn/doc/index.html

     robotium5.1下载和最新API文档:http://pan.baidu.com/s/1bnlO8MF

    官方例子记事本:http://pan.baidu.com/s/1qWLVL72

    重签名工具:http://pan.baidu.com/s/1i3H0tKD

    三、常用语法

    1.等待timeout毫秒一个名字为name的Activity启动: waitForActivity(String name, int timeout) 
    实例:assertTrue("无法启动启动类", solo.waitForActivity ("MainActivity", 30000));
    
    2.Robotium将睡眠设置的毫秒数:sleep(int time) 
    实例:solo.sleep(5000)
    
    3.清空EditText的内容:clearEditText(android.widget.EditText editText) 
    实例:solo.clearEditText((EditText)solo.getView ("edtInsertName"))
    
    4.根据按钮上的文字点击按钮:clickOnButton(String text) 
    实例:solo.clickOnButton("^绿色$");
    
    5.根据文字点击控件:clickOnText(String text) 
    实例:solo.clickOnText("控件上显示文字");
    
    6.输入内容:enterText(android.widget.EditText editText, String text) 
    solo.enterText((EditText)solo.getView("edtInsertName"), "说些什么好呢?");
    
    7.返回:goBack()
    
    8.截屏并保存为设置的名字:takeScreenshot(String name) 
    默认保存在: /sdcard/Robotium-Screenshots/
    
    
    9.解锁屏幕:unlockScreen()

    四、实战-针对APK进行的测试

     被测试项目为demo1,下面是实战的具体步骤

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

    2. 在path下添加这两个:%ANDROID_HOME% ools;%ANDROID_HOME%platform-tools;

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

    4. 下载完后,需要配置ANDROID_HOME,就是安卓SDK的位置,然后把APK拉到图标上,就会自动生成一个debug key的apk,如果无法直接单击re-sign.jar运行,需要切换到放置该jar文件的目录,cmd执行java -jar re-sign.jar产生新apk的过程中会弹出一个信息框,记得截下图,因为里面有两个信息我们等会的代码中需要用到

    5. 安装产生的apk。然后打开模拟器(模拟器器一定要打开才能安装成功),然后打开命令行  adb install mitalk_debug.apk(新生成apk的名称) , 或者双击apk文件也可以安装

    安装成功就可以再模拟器里看到该应用的图标了

    6. 打开Eclipse,点击File->New一个Android Test Project  TestDemo1, 然后点击下一步的时候选择This project(因为我们测试的是APK),然后选择要在哪个android版本上测试

    7. 在该项目下创建一个包,com.example.demo1.test,在该包下创建TestDemo1Apk类,如下

    package com.example.demo1.test;
    
    import com.robotium.solo.Solo;
    
    import android.test.ActivityInstrumentationTestCase2;
    import android.widget.EditText;
    
    @SuppressWarnings("rawtypes")
    public class TestDemo1Apk extends ActivityInstrumentationTestCase2 {
    
            private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "com.example.demo1.MainActivity";//启动类
    
            private static Class<?> launcherActivityClass;
            static{
                    try {
                            launcherActivityClass = Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
                    } catch (ClassNotFoundException e) {
                            throw new RuntimeException(e);
                    }
            }
            
            @SuppressWarnings("unchecked")
            public TestDemo1Apk() throws ClassNotFoundException {
                    super(launcherActivityClass);
            }
            
            private Solo solo;
            
            @Override
            protected void setUp() throws Exception {
                    solo = new Solo(getInstrumentation(), getActivity());
            }
    
    
        	public void testcase001() throws Exception {
        		 //等待  Activity "MainActivity" 启动
        		assertTrue("无法启动启动类", solo.waitForActivity("MainActivity", 30000));
                solo.sleep(5000);
    
              //输入文字:"131243"
                solo.enterText((EditText)solo.getView("edtInsertName"), "说些什么好呢?");
                solo.sleep(2000);
                
                //清空输入框的内容
                solo.clearEditText((EditText)solo.getView("edtInsertName"));
                
                
                //按下 按钮 "绿色"
                solo.clickOnButton("^绿色$");
                solo.sleep(2000);
    
                //按下 按钮 "黄色"
                solo.clickOnButton("^黄色$");
                solo.sleep(2000);
    
                //按下 按钮 "蓝色"
                solo.clickOnButton("^蓝色$");
                solo.sleep(2000);
    
    
                //按下 TextView "看我变变变~~~"
                solo.clickOnText("^看我变变变~~~$");
                solo.sleep(5000);      
                
        	}
        	
    
       @Override
       public void tearDown() throws Exception {
                    solo.finishOpenedActivities();
    
      }
    
    
    }
    

     

    8.右键该项目,选择property然后选择java build path, 选择 Add JARs,选择下到的robotium.jar

    Add Library,点击Junit,选择Junit4

    9.在跑测试用例之前,还需要修改下AndroidManifest.xml文件的android:targetPackage为被测应用的根的包名

        <instrumentation
            android:name="android.test.InstrumentationTestRunner"
            android:targetPackage="com.example.demo1" />
    

    10.最后: run as android junit test,就可以进行测试了  

    源码下载http://pan.baidu.com/s/1ybPUI

    五、实战-针对工作目录下的项目

     被测试项目为demo1,下面是实战的具体步骤

    1.新建一个测试项目名为demo1Test

    Eclipse-File-Project-Android Test Project

    测试项目名为demo1Test,测试目标项目选择demo1 

       

    2.添加必要类库,robotium和junit

    (1)在项目中新建lib目录,把robotium-solo-5.1.jar和robotium-solo-5.1-javadoc.jar拉进该目录。

    (2)添加junit4

    3.添加robotium

    4.创建测试用例

    右键点击包-New-JUnit Test Case

    最基础的测试用例框架类

    package com.example.demo1.test;
    
    import com.example.demo1.MainActivity;//导入目标项目的启动类
    import android.test.ActivityInstrumentationTestCase2;
    import com.robotium.solo.Solo;
    
    
    public class TestDemo1 extends ActivityInstrumentationTestCase2<MainActivity>{//继承目标项目的启动类
    
    	private Solo solo;//初始化一个solo对象
    
    	public TestDemo1() {//在构造函数处标明继承自目标项目的启动类
    		super(MainActivity.class);
    	}
    	
    	@Override
    	public void setUp() throws Exception {//在测试开始之前会调用这个方法,这里来创建一个Solo对象
    		solo = new Solo(getInstrumentation(), getActivity());
    	}
    
    	@Override
    	public void tearDown() throws Exception {//一个测试用例结束的时候会调用这个方法
    		solo.finishOpenedActivities();//这个方法将结束掉所有在测试执行过程中打开的activity
    	}
    
    
    
    }
    

    在基础测试类里面添加相关的测试方法,也就是真正在执行的测试用例

    package com.example.demo1.test;
    
    import com.example.demo1.MainActivity;//导入目标项目的启动类
    import android.test.ActivityInstrumentationTestCase2;
    import android.widget.EditText;
    
    import com.robotium.solo.Solo;
    
    
    public class TestDemo1 extends ActivityInstrumentationTestCase2<MainActivity>{//继承目标项目的启动类
    
    	private Solo solo;//初始化一个solo对象
    
    	public TestDemo1() {//在构造函数处标明继承自目标项目的启动类
    		super(MainActivity.class);
    	}
    	
    	@Override
    	public void setUp() throws Exception {//在测试开始之前会调用这个方法,这里来创建一个Solo对象
    		solo = new Solo(getInstrumentation(), getActivity());
    	}
    
    	
    	public void testcase001() throws Exception {
    		 //等待  Activity "MainActivity" 启动
    		assertTrue("无法启动启动类", solo.waitForActivity("MainActivity", 30000));
            solo.sleep(5000);
    
          //输入文字:"131243"
            solo.enterText((EditText)solo.getView("edtInsertName"), "说些什么好呢?");
            solo.sleep(2000);
            
            //清空输入框的内容
            solo.clearEditText((EditText)solo.getView("edtInsertName"));
            
            
            //按下 按钮 "绿色"
            solo.clickOnButton("^绿色$");
            solo.sleep(2000);
    
            //按下 按钮 "黄色"
            solo.clickOnButton("^黄色$");
            solo.sleep(2000);
    
            //按下 按钮 "蓝色"
            solo.clickOnButton("^蓝色$");
            solo.sleep(2000);
    
    
            //按下 TextView "看我变变变~~~"
            solo.clickOnText("^看我变变变~~~$");
            solo.sleep(5000);      
            
    	}
    	
    	
    	@Override
    	public void tearDown() throws Exception {//一个测试用例结束的时候会调用这个方法
    		solo.finishOpenedActivities();//这个方法将结束掉所有在测试执行过程中打开的activity
    	}
    
    
    
    }
    

    源码共享:http://pan.baidu.com/s/1mgKcgju

    六、一些特殊设置的说明

    1.添加到库内需要先新建Lib目录,再把robotium-solo-5.2.1.jar放到里面,这样移动项目就不会找不到

    2.测试项目的AndroidManifest.xml里面    <uses-sdk android:minSdkVersion="10" />需要在8以上,而且要跟被测试的项目一样大

    3.需要勾选

    4.最细节的就是:构造方法必须是无参数的,新建的测试用例一般都是有参数的:

    public TestHelloWorldCase() {
    super(HerlloActivity.class);
    }

    5.测试APK的时候需要重签名,然后再安装进去,才可以正常测试

     

    6.如何配置Robotium的帮助提示

    右键点击项目-Build Path-configure Build Path

    7.robotium不同版本的方法不同

    robotium的getCurrentListViews
    1.版本3.6版本和4.1以上版本的表达方式

    3.6版本:ArrayList<ListView> lw = solo.getCurrentListViews();

    4.1版本以上:ArrayList<ListView> lw = solo.getCurrentViews(ListView.class);

    还有如:

    ArrayList<ImageView> imageList=solo.getCurrentViews(ImageView.class);得到的即是ImageView
    ArrayList<ImageView> imageList=solo.getCurrentViews(ImageView.class,parentView);

    8.如何获取控件ID-两种方法

    (1)Android 实用工具Hierarchy Viewer实战

    • 是随AndroidSDK发布的工具,位置在tools文件夹下,名为hierarchyviewer.bat
    • 需要运行测试项目,在调试环境下才可以检测到模拟器的

    (2)运行命令行记录log,然后点击对应Activity,接着可以在logcat看到

  • 相关阅读:
    数据库秒级平滑扩容架构方案
    利用SQL索引提高查询速度
    SQL Server调优系列进阶篇(如何维护数据库索引)
    SQL Server调优系列进阶篇(如何索引调优)
    SQL语法集锦一:显示每个类别最新更新的数据
    TreeView中节点勾选设置
    C# WinForm捕获全局异常
    SQL SERVER 查询死锁
    DataTable导入到Excel文件
    Microsoft SyncToy 文件同步工具
  • 原文地址:https://www.cnblogs.com/ITGirl00/p/4337541.html
Copyright © 2011-2022 走看看