
Robotium是国外的自动化测试框架. 这是一个免费的Android UI测试工具. 最新版本是5.6.3,主要用于对Android平台应用程序进行黑盒自动化测试. 它提供了各种模拟. 手势操作(单击,长按,滑动等),搜索和断言API,可以操作各种控件. Robotium与Android提供的官方测试框架相结合,可以实现应用程序的自动化测试.
Robotium测试脚本是用Java编写的. 该框架易于使用并具有良好的支持. 它支持对本机和hybird的自动测试. 该API易于使用,执行速度快,可以根据控件ID进行操作,可以自动处理多个Android的Activity,还可以更好地与Maven,Gradle和Ant结合使用,从而成为持续集成测试;此外,它可以基于源代码进行操作,还可以基于APK(无源代码)测试,功能强大.
Robotium Recorder是Robotium团队在过去四,五年中可持续创建和改造Robotium框架的结果. 它可以帮助我们快速记录Java脚本(收费),并且可以在进行适当的改进和修改后输出记录的脚本. 稳定的测试用例,不幸的是,该服务当前已收费,只能使用.
Robotium官方网站:
Robotium API简介官方网站:
Robotium是基于检测的辅助软件包. Roboiutm分为两种类型的操作: 搜索控件和单击控件. 查找控件的原理是: 在服务员的waitForView()方法中,通过java反射获取视图,并匹配所需的控件,查找并返回控件对象. 单击控件的原理是,将找到的控件对象解析并打包到MotionEvent中robotium自动化测试,并基于Instrumentation框架,通过InputManager注入事件. 调用类的组织结构如下:

image.png
1. 创建Android项目
相同的数字签名,可以将Android系统Instrumentation加载到同一进程中运行,以便测试代码可以获取要测试的应用程序的数据,更详细的过程可以研究系统的测试框架Instrumentation.
Robotium框架要求被测应用程序和测试项目使用相同的签名,以便可以使用Instrumentation启动被测应用程序
APK重新签名: 在基于APK的自动测试过程中,您需要确保被测试的APK必须具有与测试项目相同的签名. 使用工具re-sign.jar,用法可以是百度. (重新签名debug.keystore进行重新签名)
重新签名工具: re-sign.jar
2. 配置Gradle
在项目目录的build.gradle中添加依赖项
如果您需要使用Robotium,则必须使用android.test.InstrumentationTestRunner. 简而言之,Instrumentation框架是Android测试环境的核心. 在此框架下,测试应用程序可以精确地控制该应用程序. 可以理解为没有图形界面的工具类,可以启动以监视其他类,其主要类是InstrumentationTestRunner.

android {
...
defaultConfig {
...
testInstrumentationRunner "android.test.InstrumentationTestRunner"
}
}
dependencies {
...
androidTestCompile 'com.jayway.android.robotium:robotium-solo:5.6.3'
}
在浏览器中搜索maven存储库,搜索robotium,选择最新版本,切换到gradle,然后添加软件包名称: name: 版本到依赖项(用冒号分隔)

image.png
3. 编写测试代码和程序包
该项目主要是编写测试代码(用于APK),因此将代码写在androidTest / java /包下,并忽略Android代码. 编写测试代码后,执行命令包test apk.

image.png
robotium是基于ActivityInstrumentationTestCase2的辅助软件包,所有测试方法都需要从父类继承. 每个测试类都以setUp开始,并以tearDown结尾,然后将每个测试用例添加到中间.
在测试包下创建一个测试类,命名约定为XxxTest,该类继承ActivityInstrumentationTestCase2,构造方法需要传递到应用的启动活动中.
示例: 在此项目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;
上面已经设置了启动活动,然后需要重载两种方法
public void setUp() throws Exception;
public void tearDown() throws Exception;
setUp()在开始测试之前会做一些准备工作,例如创建Solo实例,开始活动等.

@Override
public void setUp() throws Exception {
super.setUp();
//创建Solo实例
solo = new Solo(getInstrumentation());
//启动activity
getActivity();
}
TearDown()测试以进行一些后期护理工作,例如结束活动等.
@Override
public void tearDown() throws Exception {
solo.finishOpenedActivities();
super.tearDown();
}
完成上述工作后,其余就是我们的测试方法. 方法格式如下:
public void testcase001() {
}
代码集成:
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
public void setUp() throws Exception {
super.setUp();
//创建Solo实例
solo = new Solo(getInstrumentation());
//启动activity
getActivity();
}
public void testcase001() {
//测试用例
}
@Override
public void tearDown() throws Exception {
solo.finishOpenedActivities();
super.tearDown();
}
}
工作目录中的实战项目
最基本的测试用例框架类
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对象
super.setUp();
solo = new Solo(getInstrumentation(), getActivity());
}
public void testcase001(){
//测试用例
}
@Override
public void tearDown() throws Exception {//一个测试用例结束的时候会调用这个方法
solo.finishOpenedActivities();//这个方法将结束掉所有在测试执行过程中打开的activity
solo.tearDown();
}
}
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-260580-1.html
你们觉得可笑不