Espresso 是什么

EspressoAndroid 开发者的首选 UI 测试工具,是 Google 官方推出的 Android 应用 UI 测试框架,专为 白盒测试 设计,强调 速度快、API 简洁,适合开发者在编写代码时同步进行自动化测试。它是 Android Jetpack 测试工具的一部分,与 Android Studio 深度集成。


Espresso 的核心特点

  1. 官方支持 & 高性能
    • 由 Google 维护,直接运行在 Instrumentation 环境,测试速度极快(比 Appium 快 10 倍以上)。
  2. 同步机制
    • 自动等待 UI 线程空闲后再执行操作,无需手动添加 sleep(),避免 flaky tests(不稳定的测试)。
  3. 简洁的 API
    • 提供链式调用(Fluent API),例如 onView().perform().check(),代码可读性高。
  4. 白盒测试
    • 需要访问应用源码(与被测应用同一进程),适合开发阶段测试。
  5. 与 AndroidX Test 集成
    • 支持 JUnit 4 和 AndroidJUnitRunner,可与 Jetpack 组件(如 Room、ViewModel)配合测试。

Espresso 的核心组件

  1. ViewMatchers
    • 定位界面元素(如 withId(), withText())。
    onView(withId(R.id.login_button))
    
  2. ViewActions
    • 模拟用户操作(如 click(), typeText())。
    .perform(click())
    
  3. ViewAssertions
    • 验证结果(如 matches(), isDisplayed())。
    .check(matches(isDisplayed()))
    

Espresso 测试示例(Java)

@RunWith(AndroidJUnit4.class)
public class LoginActivityTest {@Rulepublic ActivityScenarioRule<LoginActivity> activityRule = new ActivityScenarioRule<>(LoginActivity.class);@Testpublic void testLoginSuccess() {// 1. 输入用户名和密码onView(withId(R.id.et_username)).perform(typeText("user123"));onView(withId(R.id.et_password)).perform(typeText("pass456"));// 2. 点击登录按钮onView(withId(R.id.btn_login)).perform(click());// 3. 验证跳转到主页onView(withId(R.id.tv_welcome)).check(matches(withText("Welcome, user123!")));}
}

Espresso 的工作原理

  1. 基于 Instrumentation
    • 测试代码与被测应用运行在同一进程,直接调用 Activity/Fragment 的方法。
  2. 主线程同步
    • Espresso 会阻塞测试线程,直到主线程空闲后再执行操作,避免竞态条件。
  3. 无界面依赖
    • 不依赖屏幕渲染,通过 View 层级结构定位元素(即使元素不可见也能操作)。

适用场景

  • 单元测试 UI 交互:如按钮点击、输入验证。
  • 集成测试:Activity/Fragment 之间的跳转逻辑。
  • 快速反馈:在开发过程中实时验证功能。

优缺点

优点

  • 极快:直接运行在设备/模拟器上,无网络延迟。
  • 稳定:自动同步 UI 线程,减少随机失败。
  • 精准定位:支持通过 View 的 ID、文本、层级等定位元素。

缺点

  • 仅限 Android:不支持 iOS 或跨平台测试。
  • 需源码:无法测试第三方 APK(除非反编译并重签名)。
  • 复杂手势支持有限:如长按拖拽需结合 UiAutomator

Espresso vs. Appium vs. Robotium

特性EspressoAppiumRobotium
平台仅 AndroidiOS/Android/Windows仅 Android
测试类型白盒(需源码)黑盒(无需源码)黑盒/白盒
速度最快慢(网络通信)
API 简洁性⭐⭐⭐⭐⭐⭐⭐⭐⭐
跨应用测试不支持(需 UiAutomator支持不支持

如何开始使用 Espresso?

  1. build.gradle 中添加依赖:
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
    androidTestImplementation 'androidx.test:runner:1.5.2'
    
  2. 在 Android Studio 中创建测试类,继承 ActivityScenarioRuleFragmentScenario
  3. 使用 onView() 编写测试逻辑。

替代方案

  • UI Automator:适合跨应用测试(如测试通知栏)。
  • Appium:需要跨平台或测试已安装的 APK 时使用。
  • Jetpack Compose 测试:如果应用使用 Compose,需改用 compose-test 库。

总结
Espresso 是 Android 开发者的首选 UI 测试工具,尤其适合 需要快速反馈、与代码深度集成的场景。若需黑盒测试或跨平台能力,可结合 Appium/UiAutomator 使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/81717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Axios 如何通过配置实现通过接口请求下载文件

前言 今天&#xff0c;我写了 《Nodejs 实现 Mysql 数据库的全量备份的代码演示》 和 《NodeJS 基于 Koa, 开发一个读取文件&#xff0c;并返回给客户端文件下载》 两篇文章。在这两篇文章中&#xff0c;我实现了数据库的备份&#xff0c;和提供数据库下载等接口。 但是&…

IDEA项目推送到远程仓库

打开IDEA——>VCS——>Creat Git 选择项目 push提交到本地 创建远程仓库 复制地址 定义远程仓库 推送 推送成功

Prompt工程:解锁大语言模型的终极密钥

Prompt工程&#xff1a;解锁大语言模型的终极密钥 一、引言&#xff1a;Prompt的战略价值重构 在人工智能技术加速渗透的2025年&#xff0c;Prompt&#xff08;提示词&#xff09;作为连接人类意图与大语言模型&#xff08;LLM&#xff09;的核心接口&#xff0c;其战略地位已…

架构意识与性能智慧的双重修炼

架构意识与性能智慧的双重修炼 ——现代软件架构师的核心能力建设指南 作者:蓝葛亮 🎯引言 在当今快速发展的技术环境中,软件架构师面临着前所未有的挑战。随着业务复杂度的不断增长和用户对性能要求的日益严苛,如何在架构设计中平衡功能实现与性能优化,已成为每个技术…

Flutter下的一点实践

目录 1、背景2、refena创世纪代码3、localsend里refena的刷新3.1 初始状态3.2 发起设备扫描流程3.3 扫描过程3.3 刷新界面 4.localsend的设备扫描流程4.1 UDP广播设备注册流程4.2 TCP/HTTP设备注册流程4.3 localsend的服务器初始化工作4.4总结 1、背景 在很久以前&#xff0c;…

Allegro 输出生产数据详解

说明 用于PCB裸板的生产可以分别单独创建文件 光绘数据(Gerber)、钻孔(NC Drill)、IPC网表;或者通过ODB++或IPC2581文件(这是一个新格式),它包含生产裸板所需要的所有信息 光绘数据 Artwork Gerber 光绘数据一般包含设计中各个层面的蚀刻线路、阻焊、铅锡、字符等信…

5.LoadBalancer负载均衡服务调用

目录 一、Ribbon目前也进入维护模式 二、spring-cloud-loadbalancer概述 三、spring-cloud-loadbalancer负载均衡解析 1.负载均衡演示案例-理论 2.负载均衡演示案例-实操 按照8001拷贝后新建8002微服务 启动Consul,将8001/8002启动后注册进微服务 Consul数据持久化配置…

linux安装ffmpeg7.0.2全过程

​编辑 白眉大叔 发布于 2025年4月16日 评论关闭 阅读(341) centos 编译安装 ffmpeg 7.0.2 &#xff1a;连接https://www.baimeidashu.com/19668.html 下载 FFmpeg 源代码 在文章最后 一、在CentOS上编译安装FFmpeg 以常见的CentOS为例&#xff0c;FFmpeg的编译说明页面为h…

视频逐帧提取图片的工具

软件功能&#xff1a;可以将视频逐帧提取图片&#xff0c;可以设置每秒提取多少帧&#xff0c;选择提取图片质量测试环境&#xff1a;Windows 10软件设置&#xff1a;由于软件需要通过FFmpeg提取图片&#xff0c;运行软件前请先设置FFmpeg&#xff0c;具体步骤 1. 请将…

java精简复习

MyBatis批量插入 <insert id"batchInsert" parameterType"java.util.List">INSERT INTO users(name, age) VALUES<foreach collection"list" item"item" separator",">(#{item.name}, #{item.age})</foreac…

IP 网段

以下是关于 IP 网段 的详细解析&#xff0c;涵盖基本概念、表示方法、划分规则及实际应用场景&#xff1a; 一、网段核心概念 1. 什么是网段&#xff1f; 网段指一个逻辑划分的 IP 地址范围&#xff0c;属于同一子网的设备可以直接通信&#xff08;无需经过路由器&#xff09…

模型微调参数入门:核心概念与全局视角

一、引言 在深度学习领域&#xff0c;模型微调已成为优化模型性能、适配特定任务的重要手段。无论是图像识别、自然语言处理&#xff0c;还是其他复杂的机器学习任务&#xff0c;合理调整模型参数都是实现卓越性能的关键。然而&#xff0c;模型微调涉及众多参数&#xff0c;这…

端口映射不通的原因有哪些?路由器设置后公网访问本地内网失败分析

本地网络地址通过端口映射出去到公网使用&#xff0c;是较为常用的一种传统方案。然而&#xff0c;很多环境下和很多普通人员在实际使用中&#xff0c;却往往会遇到端口映射不通的问题。端口映射不通的主要原因包括公网IP缺失&#xff08;更换nat123类似映射工具方案&#xff0…

Git Push 失败:HTTP 413 Request Entity Too Large

Git Push 失败&#xff1a;HTTP 413 Request Entity Too Large 问题排查 在使用 Git 推送包含较大编译产物的项目时&#xff0c;你是否遇到过 HTTP 413 Request Entity Too Large 错误&#xff1f;这通常并不是 Git 的问题&#xff0c;而是 Web 服务器&#xff08;如 Nginx&am…

docker-记录一次容器日志<container_id>-json.log超大问题的处理

文章目录 现象一、查找源头二、分析总结 现象 同事联系说部署在虚拟机里面的用docker启动xxl-job的服务不好使了&#xff0c;需要解决一下&#xff0c;我就登陆虚拟机检查&#xff0c;发现根目录满了&#xff0c;就一层一层的找&#xff0c;发现是<container_id>-json.l…

Ubuntu 24.04 LTS 和 ROS 2 Jazzy 环境中使用 Livox MID360 雷达

本文介绍如何在 Ubuntu 24.04 LTS 和 ROS 2 Jazzy 环境中安装和配置 Livox MID360 激光雷达&#xff0c;包括 Livox-SDK2 和 livox_ros_driver2 的安装&#xff0c;以及在 RViz2 中可视化点云数据的过程。同时&#xff0c;我们也补充说明了如何正确配置 IP 地址以确保雷达与主机…

电脑开机后长时间黑屏,桌面图标和任务栏很久才会出现,但是可通过任务管理器打开应用程序,如何解决

目录 一、造成这种情况的主要原因&#xff08;详细分析&#xff09;&#xff1a; &#xff08;1&#xff09;启动项过多&#xff0c;导致系统资源占用过高&#xff08;最常见&#xff09; 检测方法&#xff1a; &#xff08;2&#xff09;系统服务启动异常&#xff08;常见&a…

uniapp地图map支付宝小程序汽泡显示

先看原文地址&#xff1a;map | uni-app官网 气泡的显示&#xff0c;可以使用callout和label两个属性 但是如果想要气泡默认显示&#xff0c;而不是点击显示&#xff0c;则用label

信创 CDC 实战 | OGG、Attunity……之后,信创数据库实时同步链路如何构建?(以 GaussDB 数据入仓为例)

国产数据库加速进入核心系统&#xff0c;传统同步工具却频频“掉链子”。本系列文章聚焦 OceanBase、GaussDB、TDSQL、达梦等主流信创数据库&#xff0c;逐一拆解其日志机制与同步难点&#xff0c;结合 TapData 的实践经验&#xff0c;系统讲解从 CDC 捕获到实时入仓&#xff0…

Python爬虫实战:研究Selenium框架相关技术

1. 引言 1.1 研究背景与意义 随着互联网的快速发展,网页数据量呈爆炸式增长。从网页中提取有价值的信息成为数据挖掘、舆情分析、商业智能等领域的重要基础工作。然而,现代网页技术不断演进,越来越多的网页采用 JavaScript 动态加载内容,传统的基于 HTTP 请求的爬虫技术难…