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
繁體地址,請注明出處:http://hk.pswp.cn/web/81717.shtml
英文地址,請注明出處:http://en.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 請求的爬蟲技術難…