Robotium 自动化测试

Robotium 自动化测试

一、Setup

Android Studio环境下,在所要测试的Module的build.gradle文件下添加,

compile ‘com.jayway.android.robotium:robotium-solo:5.4.1’

然后Sync下。

二、Start

Robotium即是对Instrumentation框架方法的封装,所以使用之前需要继承测试类,重写构造器,setUp()和tearDown()方法。

public class SplashActivityTest extends ActivityInstrumentationTestCase2 {

    private Solo solo;

    public SplashActivityTest() throws ClassNotFoundException {
        super(SplashActivity.class);
    }

    @Override
    public void setUp() throws Exception {
        super.setUp();
        solo = new Solo(getInstrumentation());
        getActivity();
    }

    @Override
    public void tearDown() throws Exception {
        solo.finishOpenedActivities();
        super.tearDown();
    }
}

其中继承的是ActivityInstrumentationTestCase2测试类。ActivityInstrumentationTestCase2测试类主要用于跨Activity的测试。(测试类的关系和架构见附页1)

其中
solo = new Solo(getInstrumentation());

solo.finishOpenedActivities();是Robotium框架独有的。

测试方法必须是public的,且以test开头。这是因为用的是Junit3框架。

public void testRun() {}

三、Use

我们所会用到的API主要来自于四个部分:

  • Robotium框架核心类Solo
  • Instrumentation框架下的ActivityInstrumentationTestCase2类
  • unit3下的断言方法
  • UI组件的getXX或findXX方法

这里我们只单独简单说明Solo类的API。

Solo类是Robotium中核心类,几乎所有的测试方法都是调用它的方法实现。

1.getXX() 匹配方法

一般使用getView(int id),getText(String text)匹配想要操作的组件,如果匹配不到,还可以尝试getButton(),getImage()等

// getCurrentActivity()方法返回的是界面显示的Activity。

2.action() 操作方法
  • clickOnView(),clickOnText()
  • clearEditText(),enterText()
  • clickInList(),clickInRecyclerView()
  • scrollDown(),scrollViewToSide()(如果是ListView等,这里不推荐使用,不如直接使用moveTo等方法)
  • goBack()
3.ssert()/search() 断言方法
  • assert:只有solo. assertCurrentActivity() 方法
  • search()返回布尔值,用于逻辑判断,断言。
  • searchXXX(),waitXXX() 与assertEqual() 方法配合。
4.waitXX(,time) 等待方法

waitForActivity()等,返回布尔值。

在time时间内条件成立,立即执行下一步,不一定非要等待time时间。

同时我们可以使用返回false的waitXX方法作为稳定的定时器使用,我常常用waitForEmptyActivityStack()。

三个作用:等待程序响应,逻辑判断,放缓测试速度

备注:waitXX方法的扩展:waitForCondition()用来支持所有判断条件,实例见下:

solo.waitForCondition(new myCondition(viewGroup), 3000)

class myCondition implements Condition {

    Object viewGroup;

    myCondition(Object viewGroup) {

        this.viewGroup = viewGroup;
    }

    @Override
    public boolean isSatisfied() {

        return viewGroup != null;
    }
}

四、practice

SplashActivity.java(这里难点主要是对listView或RecyclerView组件的遍历和判断条件的选择)

需求:

1、从启动页进入

2、切换城市,遍历所有城市

3、搜索1-9

4、如果搜索结果返回多个匹配值,遍历所有匹配值。

5、如果进入站点详情,遍历所有路线,点击收藏按钮并取消收藏

6、如果进入线路详情,遍历所有站点,刷新,然后换向后,重复一遍换向前操作。

1、从启动页进入

测试进入第一个的界面即我们绑定的界面
public SplashActivityTest() throws ClassNotFoundException {
super(SplashActivity.class);
}
这里类名是不是这个类无所谓,但构造方法中调用你想要进入的类。

2、切换城市,遍历所有城市

由于城市列表是ListView或者RecyclerView,数据对我们是未知的,布局是可变的,我们不能采用直接clickOnText,或者clickOnView进入某个城市。
对于ListView或者RecyclerView解决办法有三种ÿ

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值