espresso框架

简介: 一、espresso简介espresso是google官方推出的ui自动化框架,可以用来做单元测试和自动化测试。官方说明文档:https://developer.android.com/training/testing/espresso/官方中文文档:https://lovexiaov.

一、espresso简介
espresso是google官方推出的ui自动化框架,可以用来做单元测试和自动化测试。

优点:

1、代码风格简洁,非常易学

2、api非常小

3、Espresso 的测试跑起来很快

4、官方的框架,android studio支持

5、适用于白盒&黑盒自动化

缺点:

1、不能跨app运行

2、定位TabLayout中的tab时,由于它们拥有相同的类型和id,难以定位view

3、不能进行改变屏幕方向的操作

二、espresso组成
Espresso 由 3 个主要的组件构成

**ViewMatchers:查找view,通过onView()在当前层级中定位出view
ViewActions:与view交互,通过perform()对view执行某种操作

ViewAssertions:为view设置断言,通过check()检查view的状态**

/ withId(R.id.my_view) is a ViewMatcher
// click() is a ViewAction
// matches(isDisplayed()) is a ViewAssertion
onView(withId(R.id.my_view))
    .perform(click())
    .check(matches(isDisplayed()));

onView()查找视图的几种用法如下:

onView(withClassName()) 根据视图的类名称查找

onView(withContentDescription()) 根据视图的内容描述查找

onView(withId()) 通过视图的ID查找

onView(withText()) 视图中显示的文本查找

onView官方文档:https://developer.android.google.cn/reference/android/support/test/espresso/matcher/ViewMatchers

perform()用法:

click():返回一个点击动作,Espresso利用这个方法执行一次点击操作,就和我们自己手动点击按钮一样。

clearText():返回一个清除指定view中的文本action,在测试EditText时用的比较多。

swipeLeft():返回一个从右往左滑动的action,这个在测试ViewPager时特别有用。

swipeRight():返回一个从左往右滑动的action,这个在测试ViewPager时特别有用。

swipeDown():返回一个从上往下滑动的action。

swipeUp():返回一个从下往上滑动的action。

closeSoftKeyboard():返回一个关闭输入键盘的action。

doubleClick():返回一个双击action

pressBack():返回一个点击手机上返回键的action。

longClick():返回一个长按action

三、demo演示
1、创建工程
打开androidstudio,选择File->New->New Project,进入一下界面
1

Application name中的是工程名,company domain是package name,可以根据需要修改,也可以使用默认值;修改完之后点击next进入下一项;一路next,直到进入如下界面,Activity Name里面的内容默认是MainActivity,可以根据需要修改,也可以不修改,最后点击finish,这样就创建好了一个最简单的android工程。
2

2、配置espresso环境
g在app/build_gradle文件的dependencies中添加

androidTestImplementation 'com.android.support.test.espresso:espresso-core:2.2.2';

在defaultConfig中添加

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

如下图所示:
3

build_gradle文件被修改之后,需要点击右上角的sync Now,否则修改无法生效
4

3、写测试用例
在app/src/下有三个文件夹,main,androidTest和test,main中用来编写工程源码,androidTest和test用来存放测试代码,espresso的代码放在androidTest目录下,命名规则:在被测试文件类名后+Test,EspressoActivity的测试用例文件就是EspressoActivityTest
5
6

public ActivityTestRule activityRule = new ActivityTestRule(EspressoActivity.class);指定要测试的activity

@Test后的是测试用例,上面的一共包含三个测试用例

onView(withId(R.id.test)).check(matches(isDisplayed()));表示查找R.id.test控件,然后查看改控件是否正在展示

onView(withId(R.id.test)).perform(click());查找R.id.test控件,然后执行点击操作
onView(withId(R.id.edit_text)).check(matches(withText("123")));查找R.id.test控件,然后查看text是否为“123”,如果控件中文案等于“123”,则这条用例测试通过,否则测试失败。

如何执行测试用例?选择测试文件,然后点击run,如下图所示
7

测试用例执行结束后,会把测试结果展示出来,如下图所示:

在测试结果中可以看到测试用例总个数,失败用例和成功用例的情况。

点开失败用例的函数,可以查看失败原因,下图的失败原因是因为所选view的text实际为”sucess“,但是断言中的位”123“
8

目录
相关文章
|
1月前
|
XML Java 测试技术
TestNG 与 JUnit 测试框架:哪个更好?
【2月更文挑战第16天】
43 1
TestNG 与 JUnit 测试框架:哪个更好?
|
测试技术 iOS开发 MacOS
JUnit单元测试报错NoClassDefFoundError: org/junit/platform/launcher/core/LauncherFactory
因为 JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage JUnit Platform是提供了运行(测试框架)环境的平台 JUnit Jupiter 是新的Junit5(子项目提供了一个基于平台测试运行Jupiter的测试引擎) JUnit Vintage提供了Junit3/4的测试引擎(向前兼容) 所以这里报错的原因应该是:缺少对应依赖()。
770 0
JUnit单元测试报错NoClassDefFoundError: org/junit/platform/launcher/core/LauncherFactory
|
Devops 测试技术 Android开发
Android单元测试框架Espresso介绍
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
322 0
|
缓存 Android开发 开发者
Dagger2 框架与 SystemUI
Dagger2 框架与 SystemUI
Dagger2 框架与 SystemUI
|
前端开发 数据库 Android开发
一文带你玩转安卓Kotlin+Retrofit+RxJava+MVP架构(附Demo)
一文带你玩转安卓Kotlin+Retrofit+RxJava+MVP架构
240 0
一文带你玩转安卓Kotlin+Retrofit+RxJava+MVP架构(附Demo)
|
测试技术 Android开发 程序员
|
Java 测试技术 Android开发
[译] 使用 Espresso 和 Mockito 测试 MVP
本文讲的是[译] 使用 Espresso 和 Mockito 测试 MVP,作为软件开发者,我们尽最大努力做正确的事情确保我们并非无能,并且让其他同事以及领导信任我们所写的代码。我们遵守最好的编程习惯、使用好的架构模式,但是有时发现要确切的测试我们所写的代码很难。
1196 0
|
Java 测试技术 Android开发
Android单元测试(六):Mockito学习
前面花了很大篇幅来介绍JUnit4,JUnit4是整个单元测试的基础,其他的测试框架都是跑在JUnit4上的。接下来我们将来学习怎么样在Android的单元测试中集成Mockito。
1148 0
|
测试技术 Android开发
Android单元测试(五):JUnit进阶
前面一章介绍了JUnit的一些基本用法,本章来介绍关于JUnit更高级的用法,这些功能我们可能并不一定会用到,但是了解它,对JUnit会有更深刻的认识。 5.1 Test runners 大家刚开始使用JUnit的时候,可能会跟我一样有一个疑问,JUnit没有main()方法,那它是怎么开始执行的呢?众所周知,不管是什么程序,都必须有一个程序执行入口,而这个入口通常是main()方法。
1025 0
|
Java 测试技术 Android开发
Android单元测试(四):JUnit介绍
JUnit是java开发人员的一个主要的测试工具,做Android开发同样是离不开java的,所以Android单元测试依然可以基于JUnit来写测试。但是JUnit只能运行在纯java环境上,前面我们介绍过MVP架构下,可以将View层隔离开来,单独针对Presenter层、Model层来测试。
1184 0