Android Espresso 测试框架探究
来源:互联网 发布:人工智能 制造业 编辑:程序博客网 时间:2024/05/16 06:48
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 Espresso 测试框架介绍
- Android自动化测试框架---Espresso(1)
- Android自动化测试框架---Espresso(2)
- Android自动化测试--Espresso框架使用
- Espresso——Android自动化测试框架
- 功能测试框架 espresso
- Android测试 ---- Espresso + Jacoco
- Android Espresso UI测试
- Android Espresso测试
- Android单元测试框架-Espresso
- Android自动化测试中Espresso框架学习笔记(1)
- 如何在Android Studio使用Espresso框架自动化测试
- Android 单元测试之Espresso - Google官方UI测试框架
- Android自动化测试框架Espresso(一)——简介
- Android Robolectric 测试框架探究
- Android测试工具Espresso简介
- Android Studio Espresso测试配置
- linux进程通信--有名管道
- RadioGroup实现底部导航
- Ubuntu使用技巧(一)
- 如何定位Obj-C野指针随机Crash(二):让非必现Crash变成必现
- LeetCode #15 3Sum
- Android Espresso 测试框架探究
- 随机数函数
- 三种定时任务的比较
- private protected internal public 关键字的用法
- Plus one
- (iPhone/iPad开发)怎样判断ios app第一次启动
- Java 线程池源码
- CityMaker学习教程09 一个示例,多窗体,画中画,多屏幕显示
- Node.js 入门教程