引言

Espresso和Robotium都是android UI自动化测试框架,且都是建立在Android Instrument的基础之上。对于测试人员来说,UI测试应该具备如下三个特点:1. 容易编写;2. 运行速度快;可靠性高。本文正是针对“速度”做出的讨论。

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 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());
onView(ViewMatchers.withText("Note 1")).check(ViewAssertions.matches(isDisplayed())); //添加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());
onView(ViewMatchers.withText("Note 1")).check(ViewAssertions.matches(isDisplayed())); //菜单删除note1和note2
onView(ViewMatchers.withText("Note 1")).perform(ViewActions.click());
onView(isRoot()).perform(ViewActions.pressMenuKey());
onView(ViewMatchers.withText("Delete")).perform(ViewActions.click());
onView(ViewMatchers.withText("Note 1")).check(ViewAssertions.doesNotExist());
onView(ViewMatchers.withText("Note 2")).perform(ViewActions.longClick());
onView(ViewMatchers.withText("Delete")).perform(ViewActions.click());
onView(ViewMatchers.withText("Note 2")).check(ViewAssertions.doesNotExist());
}

Espresso测试结果

小结

Robotium

Espresso

32.682 s

5.694 s

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

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

  1. 普通方式 分页【NOT IN】和【>】效率大PK 千万级别数据测试结果

    首现创建一张表,然后插入1000+万条数据,接下来进行测试. use TTgoif exists (select * from sysobjects where name='Tonge')drop t ...

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

    让Quality Center走下神坛--测试管理工具QC/ALM 和 RQM.Jira.TP.SCTM大PK 在写完了<让QTP走下神坛>之后,现在来谈谈测试管理工具,献给所有正在或打算 ...

  3. Webpack 打包优化之速度篇

    在前文 Webpack 打包优化之体积篇中,对如何减小 Webpack 打包体积,做了些探讨:当然,那些法子对于打包速度的提升,也是大有裨益.然而,打包速度之于开发体验和及时构建,相当重要:所以有必要 ...

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

                                        行为类模式大PK 行为类模式包括责任链模式.命令模式.解释器模式.迭代器模式.中介者模式.备忘录模式.观察者模式.状态模式.策略 ...

  5. 设计模式之结构类模式大PK

                                      结构类模式大PK 结构类模式包括适配器模式.桥梁模式.组合模式.装饰模式.门面模式.享元模式和代理模式.之所以称其为结构类模式,是因 ...

  6. 设计模式之创建类模式大PK

                                        创建类模式大PK 创建类模式包括工厂方法模式.建造者模式.抽象工厂模式.单例模式和原型模式,他们能够提供对象的创建和管理职责.其 ...

  7. 第29章 跨战区大PK

    29.1 策略模式 VS 桥梁模式 29.1.1 策略模式 [编程实验]用策略模式实现邮件发送 (1)有文本和超文本两种格式的邮件,将这两种格式封装成两种不同的发送策略. (2)文本邮件和超文本邮件分 ...

  8. 第28章 行为型模式大PK

    27.1 策略模式 VS 命令模式 27.1.1 策略模式实现压缩算法 //行为型模式大PK——策略模式和命令模式 //实例:用策略模式实现压缩算法 #include <iostream> ...

  9. 第27章 结构型模式大PK

    27.1 代理模式 VS 装饰模式 27.1.1 代理模式 (1)场景:客人找运动员代理要求安排运动员参加比赛 (2)说明:代理人有控制权,可以拒绝客人的要求,也可以答应安排,甚至自己下去跑(因为有些 ...

随机推荐

  1. springboot(12)Redis作为SpringBoot项目数据缓存

    简介: 在项目中设计数据访问的时候往往都是采用直接访问数据库,采用数据库连接池来实现,但是如果我们的项目访问量过大或者访问过于频繁,将会对我们的数据库带来很大的压力.为了解决这个问题从而redis数据 ...

  2. spring学习(六)注解方式实现AOP

    一.导包(导入maven的依赖) <?xml version="1.0" encoding="UTF-8"?> <project xmlns= ...

  3. spring学习(一)spring简介

    Spring简介: Spring 框架是 Java 应用最广的框架,它的成功来源于理念,而不是技术本身,它的理念包括 IoC (Inversion of Control,控制反转) 和 AOP(Asp ...

  4. 面试题二十二:链表中倒数第k个节点

    方法一:双指针法定义两个指针A.B,A先走k-1步后再一起走,直到A.next==null注意: 1.链表为空 2.链表长度小于k 3.k<=0 当题目是求链表的中间节点时,可以两个指针从开头开 ...

  5. Eclipse创建Web项目后新建Servlet时报红叉错误 or 导入别人Web项目时报红叉错误 的解决办法

    如图,出现类似红叉错误. 1.在项目名称上点击右键->Build Path->Configure Build Path 2.在弹出来的框中点击Add Library,如图 3.接下来选择U ...

  6. KNN算法基本原理与sklearn实现

    ''' KNN 近邻算法,有监督学习算法 用于分类和回归 思路: 1.在样本空间中查找 k 个最相似或者距离最近的样本 2.根据这 k 个最相似的样本对未知样本进行分类 步骤: 1.对数据进行预处理 ...

  7. Python os.pipe() 方法

    概述 os.pipe() 方法用于创建一个管道, 返回一对文件描述符(r, w) 分别为读和写.高佣联盟 www.cgewang.com 语法 pipe()方法语法格式如下: os.pipe() 参数 ...

  8. PHP strncasecmp() 函数

    实例 比较两个字符串(不区分大小写): <?php高佣联盟 www.cgewang.comecho strncasecmp("Hello world!","hell ...

  9. IntelliJIDEA的安装、配置与使用

    引言: IDEA,全称 IntelliJ IDEA,是 Java 语言的集成开发环境,IDEA 在业界被公认为是 最好的 java 开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE 支持 ...

  10. Qt使用MD5加密

    Qt中包含了大部分常用的功能,比如json.数据库.网络通信.串口通信以及今天说的这个MD5加密: Qt中将字符串进行MD5加密其实比较简单,代码如下: #include <QCoreAppli ...