Espresso——Android测试工具Espresso简介
2015-07-24 16:33
761 查看
本文通过网络文章来介绍Espresso的使用
Espresso是一个新工具,相对于其他工具,API更加精确。并且规模更小、更简洁并且容易学习。它最初是2013年GTAC大会上推出的,目标是让开发者写出更简洁的针对APP的UI测试代码。
虽然针对的是开发者(Developer),但是对于测试人员来说也是可以用的。因为它有一些Robotiun和Selendroid缺乏的关键特征。
2、代码快速上手;
3、容易扩展;
4、无需考虑复杂的多线程测试;
5、有Google做靠山。
ViewMatchers – 实现匹配器的一组对象。允许可以通过多次的onView方法,在层次图中找到目标视图(views)。
ViewActions – 对视图触发动作(例如点击)。
ViewAssertions – 用于插入测试关键点的一组断言,可用于判断某视图(view)的状态。
withId(R.id.my_view) 是匹配器
.perform(click())
// click()事件
.check(matches(isDisplayed()));
// matches(isDisplayed())是断言
UiObject
setnum =
UiUtil.findByResourceId("android:id/edtno1");
setnum.click();
setnum.setText("10");
Robotium:
EditText
txtVal1 =
(EditText)
solo.getView(R.id.edtno1);
solo.clearEditText(txtVal1);
solo.enterText(txtVal1,
"12");
Espresso:
onView(withId(R.id.edtno1)).perform(clearText()).perform(typeText("12"));
可以看出,与其他框架相比,Espresso代码集成度更高,功能分块更加集中:onView用于定位视图,perform用于产生事件,check用于检测checkpoint。
1、首先下载Espresso的独立jar包,之后在建立好的Android Test Project里引用这个jar包。
2、在AndroidManifest.xml里包含users-library和instrumentation字段,用于指明测试库和被测目标:
3、在项目名称上右键->Run->Run Configurations,把Instrumentation Runner设置为如下:
接着点击apply,run就可以开始测试。
可能遇到的问题:
遇到这个问题,需要在项目->properties,左侧选择Java Build Path,然后在最后一个选项卡Order and Export中勾选espresso的jar包。如下:
可以看到,由于espresso是基于Instrumentation的(继承ActivityInstrumentationTestCase2),所以在项目的建立和代码编写上,都与Instrumentation是一脉相承的。
Writing Case
建立的测试项目内容如下,主要实现对默认的hello world字段查找、点击、判断的功能,可以粗略看到espresso的代码结构和执行过程:
开始执行时,底部console区域会输出带有espresso标签的log,同时,安装完apk并开始测试后,会在LogCat中显示内容,方便查看运行状态和调试。
运行结果:
同时,由于是基于Instrumentation的,所以也摆脱不了框架本身的限制:
1.无法控制app process以外的activity
2.无法在ui线程进行动画时控制操纵activity
Espresso是一个新工具,相对于其他工具,API更加精确。并且规模更小、更简洁并且容易学习。它最初是2013年GTAC大会上推出的,目标是让开发者写出更简洁的针对APP的UI测试代码。
虽然针对的是开发者(Developer),但是对于测试人员来说也是可以用的。因为它有一些Robotiun和Selendroid缺乏的关键特征。
关键特征
1、快速;2、代码快速上手;
3、容易扩展;
4、无需考虑复杂的多线程测试;
5、有Google做靠山。
Espresso的主要组件
Espresso – 与视图(views)交互的入口,并暴露了一些视图(views)无关的API(例如回退按钮)。ViewMatchers – 实现匹配器的一组对象。允许可以通过多次的onView方法,在层次图中找到目标视图(views)。
ViewActions – 对视图触发动作(例如点击)。
ViewAssertions – 用于插入测试关键点的一组断言,可用于判断某视图(view)的状态。
例子
onView(withId(R.id.my_view)) //withId(R.id.my_view) 是匹配器
.perform(click())
// click()事件
.check(matches(isDisplayed()));
// matches(isDisplayed())是断言
对于同样UI的代码复杂性对比
UiAotomator:UiObject
setnum =
UiUtil.findByResourceId("android:id/edtno1");
setnum.click();
setnum.setText("10");
Robotium:
EditText
txtVal1 =
(EditText)
solo.getView(R.id.edtno1);
solo.clearEditText(txtVal1);
solo.enterText(txtVal1,
"12");
Espresso:
onView(withId(R.id.edtno1)).perform(clearText()).perform(typeText("12"));
可以看出,与其他框架相比,Espresso代码集成度更高,功能分块更加集中:onView用于定位视图,perform用于产生事件,check用于检测checkpoint。
Espresso的使用
setup1、首先下载Espresso的独立jar包,之后在建立好的Android Test Project里引用这个jar包。
2、在AndroidManifest.xml里包含users-library和instrumentation字段,用于指明测试库和被测目标:
3、在项目名称上右键->Run->Run Configurations,把Instrumentation Runner设置为如下:
接着点击apply,run就可以开始测试。
可能遇到的问题:
Test run failed: Instrumentation run failed due to ‘java.lang.ClassNotFoundException’”
遇到这个问题,需要在项目->properties,左侧选择Java Build Path,然后在最后一个选项卡Order and Export中勾选espresso的jar包。如下:
可以看到,由于espresso是基于Instrumentation的(继承ActivityInstrumentationTestCase2),所以在项目的建立和代码编写上,都与Instrumentation是一脉相承的。
Writing Case
建立的测试项目内容如下,主要实现对默认的hello world字段查找、点击、判断的功能,可以粗略看到espresso的代码结构和执行过程:
1 2 3 4 5 6Run Te |
运行结果:
同时,由于是基于Instrumentation的,所以也摆脱不了框架本身的限制:
1.无法控制app process以外的activity
2.无法在ui线程进行动画时控制操纵activity
总结
目前,Espresso还处于开发人员预览状态,在Google Code上提供。但思路是,等到它足够成熟和稳定以后,将其迁移到Android SDK中。Google使用Espresso测试了他们自己的超过30个应用程序,包括G+、Maps和Drive。相关文章推荐
- android布局-GridLayout
- Android 无障碍服务一 让应用具有辅助性服务
- 自己写一个快速开发android模板
- Android笔记之四种方式实现计时器
- Android学习笔记【一】Android学习感言(包含学习见解、学习方法)
- 在Android Studio 中加入jar 和.so 文件
- 译文:Android中糟糕的AsyncTask
- Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法
- Android实现ListView下拉刷新和上拉加载更多的思路
- 如何快速从android开发转向ios开发--oc语法篇
- Android ViewPager
- Android Studio 快捷键
- 通过Handler与线程嵌套TimerTask实现循环交替任务 分类: Android 2015-07-24 16:14 162人阅读 评论(0) 收藏
- adnroid sdk 更新代理设置
- Android Java中调用js代码,js中调用Java代码
- Android属性动画完全解析(上),初识属性动画的基本用法
- Android事件模型之interceptTouchEvnet ,onTouchEvent关系正解
- Android开发实例透明效果设置方法
- IOException Unable to resolve host "api.linkface.cn": No address associated with hostname
- 有关于android 定位和地图功能