初识Espresso
本篇内容介绍了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相关推荐
- Android LiveData初识
LiveData初识 LiveData is an observable data holder class. Unlike a regular observable, LiveData is lif ...
- day3----编码-集合-深浅copy-文件操作-函数初识
day3----编码-集合-深浅copy-文件操作-函数初识 本文档主要内容: 一 编码 二 集合 三 深浅copy 四 文件操作 五 函数初识 首先,我们来看看两个字符串的比较 打开cmd,进入do ...
- ⑥python模块初识、pyc和PyCodeObject
一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...
- 初识java类的接口实现
初识java类的接口实现 如果两个类之间不存在继承关系,且两个类都想实现同一个接口,两个类都必须实现接口中全部方法,否则报语法错误 如果两个类之间存在继承关系也想实现同一个接口,父类如果实现了某个接口 ...
- vba 编辑combobox内容_初识Visual Basic编辑器并建立一段简单的代码
大家好,从今日开始我正式推出"VBA之EXCEL应用"教程,这个教程是面向初学人员的教程,教程一共三册,十七个章节,从简单的录制宏实现一直讲到窗体的搭建,都是我们在利用EXCEL工 ...
- 16.1、python初识面向对象(1)
初识面向对象 楔子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人 ...
- Espresso小试
Espresso开源了,那就试着用一下, 1. 下载Espresso Espresso没有提供单独的jar包下载,建议clone整个项目或者下载zip包 git clone https://code. ...
- 精通Python网络爬虫:核心技术、框架与项目实战.1.1 初识网络爬虫
摘要 网络爬虫也叫做网络机器人,可以代替人们自动地在互联网中进行数据信息的采集与整理.在大数据时代,信息的采集是一项重要的工作,如果单纯靠人力进行信息采集,不仅低效繁琐,搜集的成本也会提高.此时,我们 ...
- 初识mysql数据字段属性_MySQL数据库~~~~初识、基础数据类型
一 数据库初识 1.1 什么是数据库 数据库(DataBase,简称DB),简而言之可视为电子化的文件柜----存储电子文件的处所,用户可以对文件中的数据运行新增,截取,更新,删除等操作. 所谓数据库 ...
最新文章
- 程序员过年最怕问到什么?
- 《面向对象分析与设计》读书笔记——第一章 复杂性
- 为模型推断的端部的大小
- 2022年全球及中国光纤馈通件行业发展建议与十四五规划动向展望报告
- Struts2.1.6+Spring2.5.6+Hibernate3.3.2+mysql整合+分页模板
- 作用域js和java区别_js作用域理解
- 微信开发中,H5的video标签使用
- Octave 作图 无响应
- 设计模式学习——代理模式(Proxy Pattern)
- 你真的了解iaas、PaaS、SaaS的区别吗?
- Java中try、finally语句中有return时的执行情况
- Matplolib subplot 子图控制
- 汇川AM系列Modbus通信设置
- 配置单交换机VLAN划分
- 如何将图片批量转换成PDF
- [NOIP2013 提高组] 火柴排队
- 人际关系和心理活动机制总结 -- 宁向东的清华管理学课总结
- 做一名活动策划是什么体验?
- 深度学习: ground truth 解释
- 计算机组成原理第一章知识点总结