Robotium

前段时间用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\tools\zipalign.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  * [email protected]
 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 }

看一下第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>

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

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

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

时间: 2024-10-20 05:13:45

Robotium的相关文章

Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.3——使用Robotium进行功能测试

问题: 你想要使用Robotium库测试activity. 解决方案: 增加Robotium依赖,编写自己的测试脚本. 讨论: Android Test Support Library提供类可以操作activity里的窗口部件,但是有更简单的方式操作Android UI.虽然这本书不是介绍测试的,但是可以很容易的将Robotium依赖增加到Gradle然后运行测试. Robotium项目被描述成"像Selenium,但是为了Android".这是一个自动化测试框架,可以很方便的为And

robotium从入门到放弃 二 第一个实例

1.导入被测试的源码 我们先下载加你计算器源码,下载地址: https://robotium.googlecode.com/files/AndroidCalculator.zip 如果地址被墙无法现在下面网盘地址也可以下载: 链接: http://pan.baidu.com/s/1c2e8McC 密码: vsj8   打开eclipse,点击File-Import 选择Existing Projects into Workspace,点击Next   选择Select archive file,

Android studio 下的robotium自动化测试和持续集成

一.前言 Android Studio是一个Android开发环境,基于IntelliJ IDEA.类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试.作为官方主推的开发环境和停止对其他开发IDE的支持,Android Studio将成为今后唯一的android开发环境.本文主要介绍在Android Studio环境下的Robotium测试框架使用方法和持续集成. 二.在Android Studio中使用Robotium 2.1基础环

【金阳光测试】Android自动化 -- 学习历程:Robotium原理初步

章节:自动化基础篇——Monkey原理初步和改良优化(第四讲) 网易云课堂: http://study.163.com/course/courseLearn.htm?courseId=712011#/learn/video?lessonId=876095&courseId=712011 主要讲解内容与笔记: 一.基于控件 1.spinner——下拉菜单 2.TabHost——左右滑动选择菜单,类似电话本 3.Gallery——图形 4.Progressbar——进度条 5.DatePicker—

robotium之does not have a signature matching问题

今天发现个很low的问题,脚本都写好了,运行Robotium测试用例时报错如下: [2017-03-01 09:58:54 - baiduAppTest] Test run failed: Permission Denial: starting instrumentation ComponentInfo{com.example.tieba.test/android.test.InstrumentationTestRunner} from pid=24015, uid=24015 not allo

robotium之基本操作和log操作

自动化测试最重要的就是LOG和报告,这是自动化的精髓所在.... 检验开发成果时,所有的文档,流程图等等都是辅助工具,当然缺少这些是不可行的,但是做这些的目的就是为了把产品设计出来:用户和需求最后希望要的也是产品,如网站,apk等等: 那么检验测试成果是什么呢?当然是测试报告,你发现多少BUG,做过多少操作,没有人会关心,别人只关心你对产品质量的控制:报告中就是质量的体现: 所谓的LOG至是让你更好的回归操作,你做过什么操作后出现什么问题,很多时候自己都不记得,那么log就很重要:好了写了那么多

Robotium第一天:搭建环境测试微信

因为要在命令行下运行一些android的工具,所以配置一些环境变量会比较方便: 遇到问题: java -jar re-sign.jar 出现提示android路径没有配置好: 需要配置如下: 配置ANDROID_HOME为android sdk的安卓目录,例如:D:\android-sdk 在path下添加这两个: %ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools; 重新开关一次命令窗口 在真机中安装APK(以腾讯微信作为测试的apk) 因为r

Android 测试 Appium、Robotium、monkey等框架或者工具对比

1. Appium测试 (功能测试,用户接受度测试,黑盒测试) - Rating: 8 Website: http://appium.io/ Appium测试相当于黑盒测试.只是测试UI逻辑正确性.所以Appium测试框架提供的方法有限.获取一个AppiumDriver对象.该对象只是有很多findElements()的方法,获取到UI元素.UI元素是WebElement,这个类提供的方法基本是获取信息为主,比如获取name,class,tagName,location,text,isSlect

android studio2.0 搭建Robotium环境--eclipse--apk 环境搭建

1.配置好android sdk ,java环境 2.重新签名apk文件 在用户目录下,会有一个.android的目录,把re-sign.jar放在该目录下.执行命令 java -jar re-sign.jar 即可 再把apk文件脱到打开的re-sign上.保存重新签名后的文件. 注意,弹出的如下需要截图,后面会用到. 也可以用脚本直接操作.bat脚本如下 bat脚本和re-sign.jar再同一个目录下. @echo off echo "你的.android目录为:" echo %

robotium原理之获取WebElement元素

robotium框架支持WebView,在robotium中有getWebElements().getWebElements(By by)等方法来获取android中的WebView的元素,并提供了 clickOnWebElement方法来完成点击事件.android中的原生控件是比较好攻取的,那么对于WebView这个框架是怎么获取的呢. 第一步:利用JS获取页面中的所有元素 在PC上,获取网页的元素可以通过注入javascript元素来完成,以Chrome浏览器为例,打开工具--JavaSc