Robotium和Espresso大PK——速度篇

引言

Espresso和Robotium都是android UI自动化测试框架,且都是开源库。Robotium作为早期Android世界里用得最为广泛的测试框架,基于JUnit扩展了大量关于Android UI的有效测试方法。

Espresso是一个新工具,相对来说,API更加精确,有助于开发者写出更简洁的针对APP的UI测试代码。Espresso的诞生,最大的优势就在于“快”。Robotium的测试代码中,通常会有大量的Sleep,waitFor,以此来等待控件的加载,否则极有可能失败。而Espresso则没有同步的烦恼,因此极大提高了测试速度。

对于大多数基于Android Instrumentation的测试框架(Robotium)来说,测试线程与UI线程是相互独立的,而Espresso则不同,运行时自动与UI线程同步,因此,Espresso的actions和assertions操作运行飞快。

下面,就让我们一起来感受一下“飞一般的感觉“!

 

测试手机:VIVO X520L——CPU:四核;内存:3GB

测试对象:NotePad——Robotium带源码的样例测试应用程序

测试内容:

  1. 新建文本Note 1,保存;
  2. 新建文本Note 2,保存;
  3. 检查Note 1和Note 2新建成功
  4. 点击进入Note 1文本,使用Menu删除;
  5. 长按Note 2进行删除。
  6. 检查Note 1和Note 2删除成功

测试代码

1.    Robotium测试代码

public class NotePadRbot extends ActivityInstrumentationTestCase2<NotesList>{

    private Solo solo;

    public NotePadRbot() {
        super(NotesList.class);
    }

    public void testAddNote() throws Exception {
        //新建Note 1和Note 2,并判断是否成功
        solo.clickOnMenuItem("Add note");
        solo.enterText(0, "Note 1");
        solo.clickOnMenuItem("Save");
        solo.clickOnMenuItem("Add note");
        solo.enterText(0, "Note 2");
        solo.clickOnMenuItem("Save");
        boolean expected = true;
        boolean actual = solo.searchText("Note 1") && solo.searchText("Note 2");
        assertEquals("Note 1 and/or Note 2 are not found", expected, actual); 

        //删除Note 1和Note 2,并判断是否成功
        solo.clickOnText("Note 1");
        solo.clickOnMenuItem("Delete");
        boolean expected2 = false;
        solo.clickLongOnText("Note 2");
        solo.clickOnText("Delete");
        boolean actual2 = solo.searchText("Note 1") || solo.searchText("Note 2");
        assertEquals("Note 1 and/or Note 2 are found", expected2, actual2);
    }
}

Robotium测试结果

2.    Espresso测试代码

public class NotepadEsp extends ActivityInstrumentationTestCase2<NotesList>{

    public NotepadEsp(){
        super(NotesList.class);
    }
    public void testClickButton() throws InterruptedException {
        //添加Note1
        onView(isRoot()).perform(ViewActions.pressMenuKey());
        onView(ViewMatchers.withText("Add note")).perform(ViewActions.click());
        onView(ViewMatchers.withId(R.id.note)).perform(ViewActions.typeText("Note 1"),closeSoftKeyboard());
        onView(isRoot()).perform(ViewActions.pressMenuKey());
        onView(ViewMatchers.withText("Save")).perform(ViewActions.click());

        //添加Note2
        onView(isRoot()).perform(ViewActions.pressMenuKey());
        onView(ViewMatchers.withText("Add note")).perform(ViewActions.click());
        onView(ViewMatchers.withId(R.id.note)).perform(ViewActions.typeText("Note 2"));
        onView(isRoot()).perform(ViewActions.pressMenuKey());
        onView(ViewMatchers.withText("Save")).perform(ViewActions.click());

        //菜单删除Note1
        onView(ViewMatchers.withText("Note 1")).perform(ViewActions.click());
        onView(isRoot()).perform(ViewActions.pressMenuKey());
        onView(ViewMatchers.withText("Delete")).perform(ViewActions.click());
        onView(ViewMatchers.withText("Note 2")).perform(ViewActions.longClick());
        onView(ViewMatchers.withText("Delete")).perform(ViewActions.click());
    }
}

Espresso测试结果

小结


Robotium


Espresso


32.682 s


5.694 s

从表格中,我们可以清晰看到,执行相同的测试用例,Espresso的速度是Robotium的5.7倍。不同于Robotium的sleep/poll机制,Espresso完全受事件驱动,测试线程与UI线程同步,速度优势显著。

时间: 2024-10-03 21:44:37

Robotium和Espresso大PK——速度篇的相关文章

让Quality Center走下神坛--测试管理工具大PK(转)

让Quality Center走下神坛--测试管理工具QC/ALM 和 RQM.Jira.TP.SCTM大PK 在写完了<让QTP走下神坛>之后,现在来谈谈测试管理工具,献给所有正在或打算做测试管理工作的同行. 当然,话题离不了Quality Center——但又不只是谈QC,我会结合对比各种主流的企业级测试管理工具,包括标题提到的:HP QC/ALM.IBM RQM.51Testing TP.Micro Focus SCTM.Atlassian Jira.但是不会提及Bugzilla.Bug

RQNOJ PID192 梦幻大PK [2017年6月计划 二分图02]

PID192 / 梦幻大PK ☆ 提交你的代码 查看讨论和题解 你还木有做过哦 我的状态 查看最后一次评测记录 质量 7 题目评价 质量 7 ★★★★★ ★★★★☆ ★★★☆☆ ★★☆☆☆ ★☆☆☆☆ 50% 0% 25% 0% 25% ★ ★ ★ ★ ☆ 通过人数 754 / 2273 通过统计 最短耗时 0ms 最小内存 0KB 匹配 题目标签 类型 匹配 题目描述 难得到了生日,正逢上班里面一年一度的梦幻大PK,分2组对拼.但是由于某种原因,参加PK的第1组中有些人不能和第2组人PK.可能

设计模式之行为类模式大PK

                                    行为类模式大PK 行为类模式包括责任链模式.命令模式.解释器模式.迭代器模式.中介者模式.备忘录模式.观察者模式.状态模式.策略模式.模板方法模式.访问者模式.该组设计模式众多,如下我们着重介绍一下命令模式VS策略模式.状态模式VS策略模式.观察者模式VS责任链模式. 命令模式VS策略模式 命令模式和策略模式类图很相似,只是命令模式多了一个接收者(Receiver)角色,通过确切的Command类调用Receiver类,实现

RQNOJ192 梦幻大PK

题意:有n个人,每个不能和 m[i] 个PK,并知道是哪 m[i] 个,求最大PK数. 题解:核心算法 -> 匈牙利算法 CODE: /* Author: JDD PROG: rqnoj192 梦幻大PK DATE: 2015.9.28 */ #include <cstdio> #include <cstring> #define REP(i, s, n) for(int i = s; i <= n; i ++) #define REP_(i, s, n) for(in

第26章 创建型模式大PK

26.1 工厂方法模式 VS 建造者模式 26.1.1 按工厂方法建造超人 (1)产品:两类超人,成年超人和未成年超人. (2)工厂:这里选择简单工厂 [编程实验]工厂方法建造超人 //创建型模式大PK——工厂方法和建造者模式 //实例:利用简单工厂创建的超人 #include <iostream> using namespace std; //***************************抽象产品接口********************* //超人接口 class ISuperM

第28章 行为型模式大PK

27.1 策略模式 VS 命令模式 27.1.1 策略模式实现压缩算法 //行为型模式大PK——策略模式和命令模式 //实例:用策略模式实现压缩算法 #include <iostream> #include <string> using namespace std; //抽象压缩算法 class Algorithm { public: //压缩算法 virtual bool compress(string source, string to) = 0; //解压算法 virtual

猪猪大PK V0.2

很久以前与的BAT小游戏(划拳),今天整理硬盘.看到了.又修改了一下,贴出来做个纪念. @ECHO OFF ::请看结尾说明 title 猪猪大PK v0.3 :Begin set 乱我不明bj=8F set 选角色bj=6E set 选对手bj=6E set 确认对手bj=E6 set 选完1bj=E6 set 选完2bj=6E set 显示双方bj=E5 set PKbj=6E set 拼内力bj=F0 set 对招法bj=0F set 比经验bj=F0 set 平bj=2E set 胜bj

第27章 结构型模式大PK

27.1 代理模式 VS 装饰模式 27.1.1 代理模式 (1)场景:客人找运动员代理要求安排运动员参加比赛 (2)说明:代理人有控制权,可以拒绝客人的要求,也可以答应安排,甚至自己下去跑(因为有些运动员本身就作自己的代理) [编程实验]找代理安排运动员比赛 //创建型模式大PK——代理模式和装饰模式 //实例:找代理安排运动员比赛 #include <iostream> #include <ctime> using namespace std; //抽象运动员 class IR

第29章 跨战区大PK

29.1 策略模式 VS 桥梁模式 29.1.1 策略模式 [编程实验]用策略模式实现邮件发送 (1)有文本和超文本两种格式的邮件,将这两种格式封装成两种不同的发送策略. (2)文本邮件和超文本邮件分别是两种不同格式的邮件的封装.MailServer是一个环境角色,它接收一个MailTemplate对象,并通过sentMail方法将邮件发送出去. //跨战区大PK——策略模式和桥接模式 //实例:用策略模式实现邮件发送 #include <iostream> #include <stri