android自动化测试框架robotium配置和使用

背景介绍

android开发过程中,每次迭代升级都需要去回归一下之前版本功能,看看最新的修改有没有影响到之前的正常功能。然而这个过程永远都是在做一些繁琐的重复的操作,大大浪费人力,所以我们决定使用自动化来做这个事情,这就引入了我们接下来要介绍的自动化测试框架——robotium。

Robotium是一款国外的Android自动化测试框架,主要针对Android平台的应用进行黑盒自动化测试,它提供了模拟各种手势操作(点击、长按、滑动等)、查找和断言机制的API,能够对各种控件进行操作。

配置robotium

robotium配置起来也很方面。首先在build.gradle中添加依赖

compile 'com.jayway.android.robotium:robotium-solo:5.6.0'

然后需要在测试工程中的AndroidManifest.xml中做如下的配置

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="xxxx.test">
    <uses-library android:name="android.test.runner" />
    <instrumentation
        android:targetPackage="xxx"
        android:name="android.test.InstrumentationTestRunner"
        />
</manifest>

上面的package="xxxx.test"是我们测试包的名称,下面定义的instrumentation中的tartPackage="xxx"是我们被测试工程的包名称,这个配置很关键,出问题的话很容易出现找不到被测试包的错误。以上就是简单的配置了,接下来就可以开始写测试代码了。

Quick Start Guide

在测试包下面创建一个测试类,命名规范为XxxTest,该类继承ActivityInstrumentationTestCase2,构造方法中需要传入app的启动activity。代码如下:

    private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "xxxx.LuancherActivity";
    private static Class<?> launcherActivityClass;
    static{
        //通过反射的方式获取的
        try {
            DebugUtil.debug(TAG, "启动类"+LAUNCHER_ACTIVITY_FULL_CLASSNAME);
            launcherActivityClass = Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }

    public XxxTest() throws ClassNotFoundException {
        super(launcherActivityClass);
    }

以上就设置好了启动的activity,然后需要重载两个方法

public void setUp() throws Exception;
public void tearDown() throws Exception;

setUp()做一些启动测试前的准备工作,如创建Solo实例,启动activity等

    @Override
    public void setUp() throws Exception {
        super.setUp();
        //创建Solo实例
        solo = new Solo(getInstrumentation());
        //启动activity
        getActivity();
    }

tearDown()中测试做一些善后的工作,如结束activity等

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

上述工作准备好之后,剩下的就是我们的测试主体方法了。方法格式如下:

public void testXxxx() {
}

注意测试方法必须按照如上格式,否则框架无法识别测试方法,也就无法运行了。这种形式的方法在一个类中是可以定义多个的。在setUp()中我们定义了一个Solo实例,这个实例到底有什么用呢?接下来稍微讲一些Solo类的用法,如果里面有的功能无法满足你的需求,可以自行去查看api文档。

Solo类用法

  1. 点击控件
solo.clickOnView(solo.getView(???));
  1. 获取控件
    solo.getView()


    获取控件api

    参数说明:
    int id:直接调用R.id.xxx
    int index:表示该控件是该页面的第几个同id控件。
    Object tag:控件的tag属性
    String id:xml中定义的id属性

  2. 点击按钮(可通过点击控件实现)
    solo.clickOnButton()


    点击按钮

    参数说明:
    int index:该页面的第几个按钮
    String text:按钮上的文字

  3. 验证toast文字


    验证toast

    toast的本质就是一个TextView,通过上述代码即可验证toast中显示的文本。

  4. 在输入框输入文本


    输入文本

    参数说明:
    第一种方法获取editText可以通过2中的方法获取,text即为待输入文本。
    第二种方法中index为该页面上的第几个输入框。

  5. 等待对话框关闭和打开


    对话框

    参数说明:
    long timeout:设置超时时间,单位为毫秒

  6. 验证activity的加载


    验证activity加载

    参数说明:
    String:直接传入activity名称字符串即可。
    int:超时事件,默认为20000,单位为毫秒
    Class<? extends Activity>:直接传入activity实例

  7. 获取网页元素


    获取网页元素

    主要说明一下By类的用法
    By.id(String) 元素的id
    By.xpath(String) 元素的节点路径
    By.cssSelector(String) 元素的css selector
    By.name(String) 元素的name属性
    By.className(String) 元素的class属性
    By.textContent(String) 元素的textContent属性
    By.tagName(String) 元素的tag属性

  8. 网页元素输入文本


    网页元素输入enter

    网页元素输入type

    type和enter的区别在于type输入时,相当于在输入完后直接键入了一个回车,而enter没有。

  9. 点击网页元素


    点击网页元素

    int match表示当有多个匹配时取哪一个,默认为0
    boolean srcoll 表示是否要滑动,默认为true

  10. 验证网页元素是否加载成功


    验证网页元素是否加载成功

    int miniumumNumberOfMatch 表示至少要找到多少个
    int timeout 超时,单位为毫秒
    boolean scroll 是否滑动

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容