本篇内容介绍了Espresso框架的基本使用.

Espresso测试框架介绍

Espresso 是一个可以轻松编写可靠用户界面测试的测试框架.

Google 于2013年10月发布了 Espresso 框架. 自2.0版本以来一直是 Android 支持库(Android Support Repository)的一部分.

Espresso 会自动将你的测试操作与应用程序的用户界面同步. 这个框架还确保 Activity 是在测试运行之前启动. 并在执行结束后将所有后台 Activity 执行完成(finished).

Espresso 一般用于测试单个应用程序, 但也可以用于跨应用程序进行测试. 如果用于应用程序之外进行测试, 则只能进行黑盒测试, 因为你无法访问到你应用程序之外的类.

Espresso 基本上由三个组成部分:

  • ViewMatchers - 在当前 View 层次结构中查找 View
  • ViewActions - 对这些 View 执行操作
  • ViewAssertions - 断言一个 View 的状态

Espresso 测试的基本结构如下:

onView(ViewMatcher)       .perform(ViewAction)     .check(ViewAssertion); 

① - 查找 View

② - 在这个 View上执行操作

③ - 验证断言

下面的代码演示了 Espresso 的基本用法:

@Test
public void espressoTest() {onView(withId(R.id.listview))            // withId(R.id.my_view) is a ViewMatcher.perform(click())               // click() is a ViewAction.check(matches(isDisplayed()));// matches(isDisplayed()) is a ViewAssertion
}

如果 Espresso 通过 ViewMatcher 没有找到这个 View, 它会将整个 View 的层次结构包含在错误消息中, 这对分析问题是非常有用的.如图所示:

引入Espresso

安装

使用 Android SDK 管理器安装 Android Support Repository.(如果已存在请忽略)

Gradle 配置

使用 Espresso 就需要将下列依赖添加到 build.gradle 文件中.

dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])testCompile 'junit:junit:4.12'// Android runner and rules supportandroidTestCompile 'com.android.support.test:runner:1.0.1'androidTestCompile 'com.android.support.test:rules:1.0.1'// Espresso supportandroidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {exclude group: 'com.android.support', module: 'support-annotations'})// add this for intent mocking supportandroidTestCompile 'com.android.support.test.espresso:espresso-intents:3.0.1'// for async testimplementation 'com.android.support.test.espresso:espresso-intents:3.0.1'// add this for webview testing supportandroidTestCompile 'com.android.support.test.espresso:espresso-web:3.0.1'
}

在build.gradle文件中要确保 android.support.test.runner.AndroidJUnitRunner 作为 testInstrumentationRunner 的参数, 你可能需要通过 packagingOptions 排除 LICENSE.txt , 但是这具体取决于你使用的库, 下面的这段代码就是一个示例.

apply plugin: 'com.android.application'android {compileSdkVersion 22buildToolsVersion '22.0.1'defaultConfig {applicationId "com.example.android.testing.espresso.BasicSample"minSdkVersion 10targetSdkVersion 22versionCode 1versionName "1.0"testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"}packagingOptions {exclude 'LICENSE.txt'}lintOptions {abortOnError false}
}dependencies {// as before.......
}

配置设备

建议关闭用于测试的 Android 设备上的动画. 动画可能会混淆 Espresso 检查资源.

练习: 创建第一个 Espresso 测试

创建测试项目

创建一个新的 Android 项目用于做 Espresso 测试.使用 Android Studio 空白模板创建两个Activity.

创建 EspressoTest1Activity.并创建相应的activity_espresso_test1.xml 布局.

public class EspressoTest1Activity extends AppCompatActivity {EditText editText;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_espresso_test1);editText = (EditText) findViewById(R.id.inputField);}public void onClick(View view) {switch (view.getId()) {case R.id.changeText:editText.setText("Lalala");break;case R.id.switchActivity:Intent intent = new Intent(this, EspressoTest2Activity.class);intent.setAction(Intent.ACTION_CALL);intent.setData(Uri.parse("123456789"));intent.putExtra("input", editText.getText().toString());startActivity(intent);break;}}
}

创建 EspressoTest2Activity.在 activity_espresso_test2.xml 布局文件中添加一个 TextView.

public class EspressoTest2Activity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_espresso_test2);TextView viewById = (TextView) findViewById(R.id.resultView);Bundle inputData = getIntent().getExtras();if (inputData != null) {String input = inputData.getString("input");viewById.setText(input);}}
}

配置build.gradle 文件

请参照上面讲述的内容进行配置.

创建 Espresso 测试

src/android/test 目录下创建 EspressoTestActivityTest 类, 用于模拟输入文字和验证输入框文字的测试.

package com.lulu.androidtestdemo.espresso;import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;import com.lulu.androidtestdemo.R;import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.closeSoftKeyboard;
import static android.support.test.espresso.action.ViewActions.typeText;
import static android.support.test.espresso.assertion.ViewAssertions.*;
import static android.support.test.espresso.matcher.ViewMatchers.*;import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;/*** Created by zhanglulu on 2018/3/5.*/
@RunWith(AndroidJUnit4.class)
public class EspressoTestActivityTest {@Rulepublic ActivityTestRule<EspressoTest1Activity> mActivityRule =new ActivityTestRule<EspressoTest1Activity>(EspressoTest1Activity.class);@Testpublic void ensureTextChangesWork() {//输入文字, 并点击按钮onView(withId(R.id.inputField)).perform(typeText("HELLO"), closeSoftKeyboard());onView(withId(R.id.changeText)).perform(click());//检查输入框文字是否改变onView(withId(R.id.inputField)).check(matches(withText("Lalala")));}
}

运行测试

右击测试方法,选择运行该测试.

运行结果

效果图如下, 自动输入,自动点击.是不是特别神奇!

初识Espresso相关推荐

  1. Android LiveData初识

    LiveData初识 LiveData is an observable data holder class. Unlike a regular observable, LiveData is lif ...

  2. day3----编码-集合-深浅copy-文件操作-函数初识

    day3----编码-集合-深浅copy-文件操作-函数初识 本文档主要内容: 一 编码 二 集合 三 深浅copy 四 文件操作 五 函数初识 首先,我们来看看两个字符串的比较 打开cmd,进入do ...

  3. ⑥python模块初识、pyc和PyCodeObject

    一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...

  4. 初识java类的接口实现

    初识java类的接口实现 如果两个类之间不存在继承关系,且两个类都想实现同一个接口,两个类都必须实现接口中全部方法,否则报语法错误 如果两个类之间存在继承关系也想实现同一个接口,父类如果实现了某个接口 ...

  5. vba 编辑combobox内容_初识Visual Basic编辑器并建立一段简单的代码

    大家好,从今日开始我正式推出"VBA之EXCEL应用"教程,这个教程是面向初学人员的教程,教程一共三册,十七个章节,从简单的录制宏实现一直讲到窗体的搭建,都是我们在利用EXCEL工 ...

  6. 16.1、python初识面向对象(1)

    初识面向对象 楔子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人 ...

  7. Espresso小试

    Espresso开源了,那就试着用一下, 1. 下载Espresso Espresso没有提供单独的jar包下载,建议clone整个项目或者下载zip包 git clone https://code. ...

  8. 精通Python网络爬虫:核心技术、框架与项目实战.1.1 初识网络爬虫

    摘要 网络爬虫也叫做网络机器人,可以代替人们自动地在互联网中进行数据信息的采集与整理.在大数据时代,信息的采集是一项重要的工作,如果单纯靠人力进行信息采集,不仅低效繁琐,搜集的成本也会提高.此时,我们 ...

  9. 初识mysql数据字段属性_MySQL数据库~~~~初识、基础数据类型

    一 数据库初识 1.1 什么是数据库 数据库(DataBase,简称DB),简而言之可视为电子化的文件柜----存储电子文件的处所,用户可以对文件中的数据运行新增,截取,更新,删除等操作. 所谓数据库 ...

最新文章

  1. 程序员过年最怕问到什么?
  2. 《面向对象分析与设计》读书笔记——第一章 复杂性
  3. 为模型推断的端部的大小
  4. 2022年全球及中国光纤馈通件行业发展建议与十四五规划动向展望报告
  5. Struts2.1.6+Spring2.5.6+Hibernate3.3.2+mysql整合+分页模板
  6. 作用域js和java区别_js作用域理解
  7. 微信开发中,H5的video标签使用
  8. Octave 作图 无响应
  9. 设计模式学习——代理模式(Proxy Pattern)
  10. 你真的了解iaas、PaaS、SaaS的区别吗?
  11. Java中try、finally语句中有return时的执行情况
  12. Matplolib subplot 子图控制
  13. 汇川AM系列Modbus通信设置
  14. 配置单交换机VLAN划分
  15. 如何将图片批量转换成PDF
  16. [NOIP2013 提高组] 火柴排队
  17. 人际关系和心理活动机制总结 -- 宁向东的清华管理学课总结
  18. 做一名活动策划是什么体验?
  19. 深度学习: ground truth 解释
  20. 计算机组成原理第一章知识点总结

热门文章

  1. UE4莫名其妙崩溃的解决办法
  2. mysql cbrt函数_Hive FUNCTIONS函数
  3. 商业智慧:创造奇迹的信件
  4. win10如何进入BIOS
  5. python,基础-字符串(1)
  6. K40自动重启的分析(RTC)
  7. 什么是做空和做多以及什么是做空期权波动率
  8. Cisco路由器内部网关协议(IGP)实验:OSPF
  9. 《算法导论》第十二章——二叉搜索树
  10. 谷歌的人工智能三大布局