Android Espresso 测试框架探究

原创 2016年05月30日 19:33:52

1 简介

Espresso 是谷歌官方实现的一个测试框架,根据官方文档,该框架主要能实现如下的功能。
查找一个view是否显示
在一个view上触发一个动作
查询一个view中是否符合一个断言
使用 onView 方法进行一般测试
使用 onData 进行 AdapterView 相关的测试(ListView, GridView,……)
使用 onData 方法进行一般测试
调试

Espresso测试是非常容易实现的,它由三部分组成:
ViewMachers:寻找用来测试的View。
ViewActions:发送交互事件。
ViewAssertions:检验测试结果。

Espresso测试有个很强大的地方是它在多个测试操作中是线程安全的。Espresso会等待当前进程的消息队列中的UI事件,并且在任何一个测试操作中会等待其中的AsyncTask结束才会执行下一个测试。这能够解决程序中大部分的线程同步问题。

简单的说,Espresso 是一套和 UI 强相关的框架,必须启动虚拟机,或者安装App到手机上才可以进行测试,测试时候,各种点击等动作会自动执行。

2 配置

在gradle 文件中增加如下内容

dependencies {
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.+'
    androidTestCompile 'com.android.support.test:runner:0.4.+'
    androidTestCompile 'com.android.support.test:rules:0.2'
}
android {
    defaultConfig {        
          testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

构建时,可能会出现annotations 相关报错,加上下面的这段就好

android {
    configurations.all {
        resolutionStrategy.force 'com.android.support:support-annotations:23.0.1'
    }
}

原因是目前 Espresso 对android 部分代码只支持到 23.0.1 而我们项目中有些android版本为23.1.1,所以出现了报错

将Build Variants 中 Test Artifact 改为 Android Instrumentation Tests
具体方法参考 robolectric 配置
这里写图片描述

3 使用

3.1 Helloworld — 以登录模块为例

在src/androidTest/ 目录下找到对应的包名,然后新建一个java类,
也可以通过在 src/main/ 中需要编写测试用例的类定义中 通过 Go to -> Test 的快捷方式,具体方法参考 robolectric 使用章节

这里写图片描述

打开文件

// JUnit4 注解

@RunWith(AndroidJUnit4.class)
public class LoginActivityTest{

    @Rule

    // 注解定义规则

    public ActivityTestRule<LoginActivity> mActivityRule = new ActivityTestRule<>(

            LoginActivity.class);

    @Test

    // 测试用例

    public void test(){

        // 清除 之前输入点用户名和密码

        onView(withId(R.id.login_et_username)).perform(clearText());

        onView(withId(R.id.login_et_password)).perform(clearText());

       // 输入用户名和密码并关闭软键盘

        onView(withId(R.id.login_et_username)).perform(typeText("18500000000\n"), closeSoftKeyboard());

        onView(withId(R.id.login_et_password)).perform(typeText("wjf"),closeSoftKeyboard());

       // 触发登录按钮的点击事件

        onView(withId(R.id.login_fa_login)).perform(click());

       //通过断言判断是否登录成功,这里通过会话列表是否显示来判断

        onView(withId(R.id.list_fl_list)).check(ViewAssertions.matches(isDisplayed()));

    }
}

测试用例写完后,运行,并观察控制台中结果即可。

3.2 一些基本用法

(谷歌官方示例,后续会将部分典型用法拖出来梳理归类)
https://google.github.io/android-testing-support-library/samples/index.html

4 若干注意点

4.1 输入法的坑

edittext 中 搜狗输入法输入的 内容,在自动化之行过程中,可能出现输入不全的问题,可换用系统自带输入法,或者谷歌原生输入法。
当有多个edittext 时候,可能出现第一个edittext 输入完之后,第二个输入无反应,可以在typeText()中的字符后面加上 “\n” 尝试解决。

5 参考文档

谷歌官方关于测试框架的文档 https://google.github.io/android-testing-support-library/

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android自动化测试--Espresso框架使用

且说正文之前,还是先说说Android单元测试的意义或者说为什么我们要进行Android的单元测试?为什么要进行单元测试?单元测试可以帮助我们程序员将bug消灭在萌芽期,为后续的集成测试减少时间.大家...

Android Espresso浅谈

Android Espresso浅谈Android Espresso浅谈 简介 准备 创建Test Case 使用ActivityTestRule创建Espresso 使用ActivityInstru...

Android Espresso单元测试

Espresso介绍在Android单元测试中,谷歌官方推荐使用Espresso框架,根据谷歌官方介绍,Espresso的最关键的优势就是它能自动同步模拟行为对UI的测试,它能够检测到主线程空闲状态的...

android studio使用espresso做自动化测试

最近尝试在项目中使用Espresso做UI测试,现在记下点笔记。 在android studio项目里打开应用build.gradle文件,在dependencies里添加依赖项:// Warnin...

android espresso

最近在弄自动化测试的东西,用了google官方提供的espresso框架,用来测试UI,现在来讲下如何使用。 这是Espresso的介绍网址:https://code.google.com/p/and...

AndroidTest Espresso初步体验

什么是Espresso?Espresso是google提供的为Android app UI测试框架,在2013年google就发布了Espresso,在Espresso2.0版本的时候就集成在sdk中...

android 的 Testing Support Library 测试支持包(库)

Testing Support Library  测试支持包(库) 这个库提供了一系列的api快速的创建和运行测试对于你的app,包括jUnit 4 和用户(UI)的测试,创建可以使用androi...

Android studio更新到2.2之后出现的问题

更新完AS之后去写作业,发现怎么弄都是没法运行,提示的错误是Conflict with dependency 'com.android.support:support-annotations'. Re...

Android单元测试02--Espresso测试

Espresso测试用真机测试,测试ui等一些信息。支持的API

Android 在开发中使用单元测试

前言 之前我们理解了 单元测试的基本概念,那么现在就来实用啦。如何在Android开发中使用单元测试。 Android里的测试: 1.Local tests:本地单元测试,直接运行在JVM上,不用运行...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android Espresso 测试框架探究
举报原因:
原因补充:

(最多只允许输入30个字)