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%\tools;%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看到
Robotium自动化测试框架实用教程(图)的更多相关文章
- 接口自动化 基于python实现的http+json协议接口自动化测试框架源码(实用改进版)
基于python实现的http+json协议接口自动化测试框架(实用改进版) by:授客 QQ:1033553122 欢迎加入软件性能测试交流QQ群:7156436 目录 1. ...
- Python 基于python实现的http+json协议接口自动化测试框架源码(实用改进版)
目录 1. 写在前面 2. 开发环境 3. 大致流程 4. 框架简介 5. 运行结果展示 6. 文件与配置 7. 测试接口实例 n ...
- 移动APP自动化测试框架
简介 移动APP的UI自动化测试长久以来一直是一个难点,难点在于UI的”变”, 变化导致自动化用例的大量维护.从分层测试的角度,自动化测试应该逐层进行.最大量实现自动化测试的应该是单元测试,最容易实现 ...
- selenium3与Python3实战 web自动化测试框架 ☝☝☝
selenium3与Python3实战 web自动化测试框架 selenium3与Python3实战 web自动化测试框架 学习 教程 一.环境搭建 1.selenium环境搭建 Client: py ...
- Java自动化测试框架-01 - TestNG之入门篇 - 大佬的鸡肋,菜鸟的盛宴(详细教程)
TestNG是什么? TestNG按照官方的定义: TestNG是一个测试框架,其灵感来自JUnit和NUnit,但引入了一些新的功能,使其功能更强大,使用更方便. TestNG是一个开源自动化测试框 ...
- 《手把手教你》系列基础篇(七十七)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试- 上篇(详解教程)
1.简介 今天主要是讲解和分享:TestNG中一个类中有多个测试方法的时候,多个测试方法的执行顺序或者依赖关系的问题.如果不用dependsOnMethods,testNG会自动根据@Test方法名称 ...
- [转]Android Studio 里搭建自动化测试框架Robotium
Android的自动化测试框架可选择的不多,后来选了Robotium(https://code.google.com/p/robotium/),它的语法及易用性挺像我们用在iOS里的KIF. 官方文档 ...
- Windows下部署Appium教程(Android App自动化测试框架搭建)
摘要: 1,appium是开源的移动端自动化测试框架: 2,appium可以测试原生的.混合的.以及移动端的web项目: 3,appium可以测试ios.android.firefox os: 4,a ...
- 【python3+request】python3+requests接口自动化测试框架实例详解教程
转自:https://my.oschina.net/u/3041656/blog/820023 [python3+request]python3+requests接口自动化测试框架实例详解教程 前段时 ...
随机推荐
- DropDownList 选中change
<script language="javascript" type="text/javascript">$(function(){ $(&q ...
- 改进iOS客户端的升级提醒功能
改进iOS客户端的升级提醒功能 功能设计 先申明一下,我是码农,不是一个产品经理,但我觉得现有市面上的很多 App,设计的 "升级提示功能" 都不太友好.在此分享一下我的想法,欢迎 ...
- [LintCode] Kth Smallest Number in Sorted Matrix 有序矩阵中第K小的数字
Find the kth smallest number in at row and column sorted matrix. Have you met this question in a rea ...
- Hive_初步见解,安装部署与测试
一.hive是什么东东 1. 个人理解 hive就是一个基于hdfs运行于MapReduce上的一个java项目, 这个项目封装了jdbc,根据hdfs编写了处理数据库的DDL/DML,自带的 二进制 ...
- OpenERP在哪储存附件?
我们知道对OpenERP中的每个内部对象(比如:业务伙伴,采购订单,销售订单,发货单,等等)我们都可以添加任意的附件,如图片,文档,视频等.那么这些附件在OpenERP内部是如何管理的呢? 默认情况下 ...
- .offsetLeft,.offsetTop
*{ margin:0; padding:0} div {padding: 40px 50px;} #div1 {background: red;} #div2 {background: green; ...
- SQL server 子查询、设置主键外键、变量及变量查询
一.子查询 子查询,又叫做嵌套查询. 将一个查询语句做为一个结果集供其他SQL语句使用,就像使用普通的表一样,被当作结果集的查询语句被称为子查询. 子查询有两种类型: 一种是只返回一个单值的子查询,这 ...
- bootstrap学习笔记之四(javascript插件)
下面展现四个插件的用法,一般插件的功能可以用两种方法实现,一种是引入bootstrap.js后,通过添加data属性实现,另一种则是通过js代码是实现. 第一个插件:下拉菜单的实现 第一种方法:dat ...
- 使用powershell提权的一些技巧
原文:http://fuzzysecurity.com/tutorials/16.html 翻译:http://www.myexception.cn/windows/1752546.html http ...
- find exec 运用
实例1:ls -l命令放在find命令的-exec选项中 : find . -type f -exec ls -l {} \; 实例2:在目录中查找更改时间在n日以前的文件并删除它们: find . ...