自动移动测试-机器人和机器人录音机

电脑杂谈  发布时间:2020-06-27 20:01:36  来源:网络整理

robotium自动化测试_2000r电码化测试标准_网络办公自动化技术与应用

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.

网络办公自动化技术与应用_2000r电码化测试标准_robotium自动化测试

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实例,开始活动等.

2000r电码化测试标准_网络办公自动化技术与应用_robotium自动化测试

@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

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...