(4.5.5.1) Espresso的简介、下载和安装

一、目标受众

Espresso面向认为测试是开发周期中不可或缺的一部分的开发者。由于可以进行黑盒测试,对于了解测试基础代码的人能够解锁Espresso的全部功能。

注意关键的点:

  • 黑盒测试。 也就是不需要了解详细代码,从而先满足了了测试和开发的分离,在可以不了解源码实现的层次上,进行功能测试
  • 了解测试基础代码。一方面要能编写测试代码,其次也要了解一定的开发情况(譬如列表的adapter,稍后会说到);

类似于让机器去模仿人的行为,让它自己去统治整个测试工作。既然是去模仿人的行为,那实际上也应该认为机器只能理解人所能理解的东西。比方说,当我去人为地做一些测试的时候,我所期待的只是UI上的变化可以符合我的预期,至于它背后的数据是怎样的实际上我并不care。因此,在做自动化测试时我个人有个最基本的思路:

把自己当成用户,只关注我能看到的东西。

二、简单示例

像下面一样写简洁、优美、可靠的Android UI测试:

@Test  
public void greeterSaysHello() {  
  onView(withId(R.id.name_field))  
    .perform(typeText("Steve"));  
  onView(withId(R.id.greet_button))  
    .perform(click());  
  onView(withText("Hello Steve!"))  
    .check(matches(isDisplayed()));  
}  

Espresso的核心API很少而且很容易学习,并且由于开源可以自定义。Espresso测试的状态预期、交互、断言很明显是没有破碎的模板内容、自定义结构或者混乱的实现细节。
Espresso测试理想情况下运行很快!当操作UI或者对UI进行断言,界面空闲时允许你在后台进行等待、同步、休眠等操作。

三、包

  • espresso-core:包括核心和基础的View匹配器、动作、断言。详见BasicsAdvanced Samples

  • espresso-web:包含支持WebView的资源。

  • espresso-idling-resource:Espresso同步后台工作的机制。

  • espresso-contrib:外部支持(External contributions)包含日期选择器、 RecyclerView和绘制动作、断言检查、CountingIdlingResource。

  • espresso-intents:hermetic测试的有效扩展名和stub意图。

最新的版本和发布信息可以在 Downloads中查看。

四、Espresso 安装指南

4.1 设置测试环境

为列避免意想不到的情况,我们强烈建议你关闭虚拟或物理测试设备上的系统动画。

你设备上,在设置–> 开发者选项 中禁止下面3项设置:

  • 窗口动画缩放(Window animation scale)

  • 过渡动画缩放(Transition animation scale)

  • 动画程序时长缩放(Animator duration scale)

3.2 下载Espresso

  • 确保在Extras下安装了最新的Android Supprot Repository(详见instructions)。
  • 打开app下的build.gradle文件。这个通常不是顶层的build.gradle文件而是app层的build.gradle。
  • 在依赖中添加下面的代码:
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'  
androidTestCompile 'com.android.support.test:runner:0.5'  
  • 更多请参考 downloads部分(espresso-contrib, espresso-web,等等)
  • 如果涉及RecyleView等,请引入espresso-contrib
  • 期间如果涉及 重复引入资源,可参考一下规则:
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    }
    androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
        exclude group: 'com.android.support', module: 'support-v4'
        exclude group: 'com.android.support', module: 'design'
        exclude group: 'com.android.support', module: 'recyclerview-v7'
    }

3.3 设置工具运行器

在app的build.gradle的android.defaultConfig下添加如下代码:

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

这里实际上只做了一件事情,就是为我们的工程指定一个TestInstrumentationRunner,TestInstrumentationRunner是用来跑我们所写的所有的测试用例的。当我们采用test的模式来构建工程时,这个Runner便会自动为我们执行所有的的测试用例,并且返回相应的测试结果。
另外,我们还需要在build.gradle中增加instrumentation testing所需要的依赖。

  • 使用了混淆的可能已经集成了以下代码,注意不能同时共存或者只用一个
testInstrumentationRunner 'com.android.test.runner.MultiDexTestRunner'

解决方方案: Expresso 疑难

/**
 * 类描述:
 *
 * Created by yhf on 2016/11/21.
 */
import android.os.Bundle;
import android.support.multidex.MultiDex;
import android.support.test.runner.AndroidJUnitRunner;

public class CustomTestRunner extends AndroidJUnitRunner
{
    @Override
    public void onCreate(Bundle arguments)
    {
        MultiDex.install(getTargetContext());
        super.onCreate(arguments);
    }
}
testInstrumentationRunner 'x.x.xx.runner.CustomTestRunner'

分析数据

为了保证我们所追踪到每个最新产品,测试的运行器收集分析数据。具体就是,在启动每个测试之前将应用的包名的哈希值上报。这样可以测量唯一的包名使用Espresso的次数和使用量。

如果你不想上报这个数据,你可以通过下面的测试运行器参数disableAnalytics “true”来禁止上报(详见 how to pass custom arguments)。

参考文献

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值