Google官方的UI自動化測試框架—— Espresso

2021-02-19 郭霖

本篇文章來自 新根 的投稿,是關於Espresso自動化UI測試框架的基礎講解以及案例分析,旨在幫助那些還未入門的朋友了解相關知識,希望大家能更加悠閒地進行UI自動化測試。

新根 的博客地址:

http://blog.csdn.net/hexingen

* Espresso英文文檔,本人翻譯水平有限,可能存在不足。

Espresso Google官方提供的Android UI自動化測試的框架

使用 Espresso 能寫出簡潔,美觀,可靠的 android ui test。

Espresso 的重要組成部分:

Espresso: 通過 onView() onData() 與view交互的進入點,它的api不依賴任何view。

ViewMatchers: 實現了 Matcher<? super View> 的集合對象。通過 onView() 來定位當前的view 。

ViewActions: 具備操作方法(例如點擊操作)的集合對象,它裡面的操作可以通過 ViewInteraction.perform() 來實現 。

ViewAssertions: 用它可以斷言,查看當前view的狀態,ViewInteraction.check() 會執行它 。

來張 Espresso 的小抄:


建議下載或點擊放大查看

案例:

onView(withId(R.id.main_view)).perform(click()).check(matches(isDisplayed()));

分析:

withId() 通過id獲取到 ViewMatcher

click() 是一個 ViewAction(即操作);

matches() 是一個 ViewAssertions

1.普通的 view 用 onView() 加載視圖:

1.1:R.id.xx是唯一的:onView(withId(R.id.main_view))。

1.2:存在 view 的 id 是不唯一的:若是通過以上方法會報錯,com.google.android.apps.common.testing.ui.espresso.AmbiguousViewMatcherException


2. AdapterView 類型(例如 gridview,listview,spinner)中的 itemView:要通過onData() 加載視圖。

特殊情況: 為了解決 viewR.id 問題(可能不存在,不唯一)的問題,獲取view 視圖可以通過自定義(或者已經存在)的 ViewMatchers

在view中執行一個操作: 

在匹配好 指定view(即 onView() 或者 onData())後,可以通過 perform() 來執行 ViewAction


當前的view可以通過 check() 執行 Assertions

通常通過 matches() 使用 assertionmatches() 是通過 ViewMatcher 來斷言當前view的狀態 。




注意點:在 view不顯示 或者 view不在當前視圖中 這兩種情況下,使用assertions 情況。

配置 Espresso, 通過添加以下 靜態jar


Github 上包含 Android StudioEclipse 的對應項目(下載全部案例後,使用Eclipse 的,選擇 BasicSampleBundled):

Eclipse的案例

https://github.com/googlesamples/android-testing/tree/master/ui/espresso/BasicSampleBundled

第一步:添加 Android Support Repository,(已經添加的,這步省略)



第二步:在Gridle中 dependencies{} 添加各自需求的jar:




最後別忘記,sync Now

第三步:創建測試包的路徑,切換到 project 視圖下,找到對應的項目,在 src 下創建一個文件,命名為 androidTest/java,然後在 anroidTest/java 路徑下創建一個包,填入項目的包名(已經存在對應項目的 android test包,省略這步)。



第四步:在 xxx.xxx.xx(androidStudio)下創建對應的測試類,按照 Espresso 使用方式,編寫測試代碼。




第五步:創建 test configuration: Edit Configurations–> +–>Android Tests configuration–>選擇 module 和添加 AndroidJUnitRunner ,name 自己定義,module 選擇要測試的項目 。




最後一步:運行測試項目。




Button點擊 ListView的item點擊 測試。

在配置 Espresso的jar 你會發現一些問題:

Error:Conflict with dependency 'com.android.support:support-annotations'. Resolved versions for app (23.3.0) and test app (23.1.1) differ.

See http://g.co/androidstudio/app-test-app-conflict for details.

這是兩個註解包衝突了。

解決方式:採用你當前項目中 com.android.support:support-annotations(個人這邊是23.3.0版)

gradle中jar依賴:



Button所在的xml:


myadapter_item(listView中item)的xml:




MainActivity.java的代碼:




MainActivity對應測試類中代碼(重要點):


注意點:@xx這些註解不能少,導入jar 需通過 static import



運行結果:


基礎Espresso 已經 ok,長徵路漫漫,還有高級Espresso方式測試,待續中!

點擊最後 閱讀原文 可查看源碼地址。


如果你有好的技術文章想和大家分享,歡迎向我的公眾號投稿,投稿具體細節請在公眾號主頁點擊「投稿」菜單查看。

歡迎長按下圖 -> 識別圖中二維碼或者掃一掃關注我的公眾號:


相關焦點

  • 自動化測試之小心做UI自動化一定要跨過這些坑
    「測試框架自己有bug,我改用例也沒用啊……」這類問題,我們需要從根上治。UI自動化開發,也應該是嚴謹的開發工作,它也需要設計模式,也是磨刀不誤砍柴工。這裡的設計,主要包括選工具、框架分層等。很多前輩都分析過UI自動化各類工具的優缺點,對工具選用筆者不再贅述。主要依託uiautomator來介紹下筆者認為比較巧妙的用例框架設計。
  • 獨立搭建UI自動化測試框架分享
    今天給大家分享一個selenium+testng+maven+ant的UI自動化,可以用於功能測試,也可按複雜的業務流程編寫測試用例,今天此篇文章不過多講解如何實現CI/CD,只講解自己能獨立搭建UI框架,如果有其他好的框架也可以聯繫我,分享一下,或者下面講解的有不明白的地方也可以留言,需要閱讀者有一定的java語言基礎,文檔中的有些註解我就不詳細介紹了,感興趣的可以去java官網查看。
  • 做UI自動化一定要跨過這些坑
    「測試框架自己有bug,我改用例也沒用啊……」這類問題,我們需要從根上治。UI自動化開發,也應該是嚴謹的開發工作,它也需要設計模式,也是磨刀不誤砍柴工。這裡的設計,主要包括選工具、框架分層等。很多前輩都分析過UI自動化各類工具的優缺點,對工具選用筆者不再贅述。主要依託uiautomator來介紹下筆者認為比較巧妙的用例框架設計。
  • 揭秘最新谷歌Android自動化測試框架--Espresso
  • APP UI自動化測試,思路全總結在這裡了
    相對於其他語言,Python做自動化測試有以下優點:選擇開發語言之後,我們需要選擇UI測試框架。目前較為主流或者使用較多的APP UI自動化測試框架有Appium、Airtest等。語言提供集成Airtest與Poco兩個測試框架的強大的IDE,對新手很友好集成基於圖像識別的UI自動化測試框架airtest,即使不懂代碼也能編寫自動化腳本跨平臺,可對Windows、Android和iOS應用軟體進行自動化測試對遊戲測試較為友好Airtest與Poco本質上是python的兩個第三方庫,測試環境搭建沒有Appium
  • Espresso淺析和使用
    Configuration的名字,選中App Module,輸入Runner,選擇」Show chooer dialog」,點擊」OK」完成Activity層級跳轉越多,越容易出錯強烈不推薦,直接獲取View的對象,調用View的方法來模擬用戶操作。應該統一使用Espresso提供的方法測試用例,特別是UI自動化測試用例,應該儘量保持邏輯簡單,覆蓋關鍵路徑就足矣。因為UI變動是很頻繁的,越複雜,維護成本就越高,投入產出比就會自然降低了。2.
  • Android UI測試之Espresso
    Android自動化測試是應用開發中提升開發效率的一種方式,它可以在短時間內跑完所有的測試方案以及實現各種交互,從而讓開發者更加方便和直觀的知道代碼的實現效果。Android自動化測試可以分為單元測試、UI測試、Monkey測試三種,同時也分小中大三種測試。單元測試又稱為模塊測試, 是針對程序模塊(軟體設計的最小單位)來進行正確性檢驗的測試工作。
  • UI自動化測試框架
    本篇要講的是Android自動化測試框架UiAutomator。
  • 樹莓派搭建UI自動化環境
    前言如果大家對於移動端UI自動化比較了解的話,都應該知道幾個主流框架,Appium、Airtest、Macaca.這些框架都有一個共同點,必須手機插在電腦上.當然有些也可以使用WIFI連接電腦,但是目前使用USB方式連接電腦是最穩定的.
  • Web自動化測試:UI自動化框架結構以及思路
    在學會使用unittest後,實際上UI自動化的基礎骨架已經搭建起來了,剩下的就是利於這套框架,增添一些我們需要的功能,目前看來,我們已經可以使用此框架來批量運行用例,欠缺的是整體的思路以及一些其他功能細節,比如日誌記錄、封裝webdriver、讀取資料庫等功能的實現。
  • 20+最好的開源自動化測試工具
    Selenium與許多程式語言、測試框架、瀏覽器和作業系統兼容,是web應用程式的一個非常棒的自動化測試工具。Watin是一個開源的測試自動化框架,它幫助用戶界面和功能web應用程式測試。此工具主要用於Internet Explorer和FireFox瀏覽器。
  • 自動化測試:如何構建Selenium框架
    除了web瀏覽器應用,你還可以通過Appium實現Android和iOS等行動裝置的自動化。所有這些能力觸手可及,我們可能會覺得戰無不勝。測試自動化現在就沒有問題了嗎?不幸的是,自動化從來就沒有那麼容易。許多測試團隊每天都在為測試的可維護性和可伸縮性而掙扎。通常,在經過第一個初始階段之後,測試團隊會後悔他們沒有從一開始就花足夠的時間和精力來學習如何構建一個好的框架。
  • robotframework自動化測試框架
    10,安裝requests(為了RF引用RequestsLibrary庫)使用pip命令安裝requests,安裝命令是:pip install requests11,安裝RequestsLibrary(http request庫)以上安裝完成之後,如何啟動RIDE
  • Espresso實戰:快速的Android UI自動化測試
    本文出自:Michael Evans,譯文出自:開發技術前線,譯者:desmond1121,校對者:Mr.Simple在我和很多Android開發者聊天的時候,我注意到他們在開發的過程中並不注重測試這一環節,原因是他們認為Android測試太難實現,
  • 又一款 UI 自動化測試及錄製工具包括回歸測試:UIRecorder
    通過 UIRecorder 的錄製功能,可以在自測的同時,完成測試過程的錄製,生成 JavaScript 測試腳本代碼。回歸測試過程中,可以利用生成的 JavaScript 測試腳本代碼,使用 Mocha 對自測過程進行回放,以達到零成本做自動化回歸測試的目的。
  • Web UI自動化測試之驗證碼登錄
    出品|51Testing軟體測試網系統登錄是開啟web ui自動化測試的關鍵一步。隨著安全意識的加強,驗證碼登錄已經成為各大web應用的必備防範措施,其目的是保護web應用安全,一般防止機器大規模註冊,機器暴力破解數據密碼等危害。那麼,在我們的web ui自動化中,如何實現或者跳過驗證碼登錄系統呢?下面簡單介紹幾種方法。
  • 【轉】在Android Studio中進行單元測試和UI測試
    這樣,就會在正確的文件夾內(app/src/test/java/com/example/testing/testingexample)生成測試類框架,在框架內填入測試方法即可。那是因為,位於src/tests目錄下的測試是運行在本地電腦Java虛擬機上的單元測試。編寫測試,實現功能使測試通過,然後再添加更多的測試...這種工作方式使快速迭代成為可能,我們稱之為測試驅動開發。值得注意的是,當在本地運行測試時,Gradle為你在環境變量中提供了包含Android框架的android.jar包。
  • 微信小程序UI自動化測試實踐:Minium!
    則是基於圖像識別和Poco控制項識別,之前也對此框架做過比較深入的了解,但是和Appium一樣,對於小程序自動化測試來說,以上兩者無法深入小程序邏輯層,只能作用於渲染層,從另外一個角度來說,這兩個框架還屬於黑盒自動化測試的範疇。
  • 5款強大的Python自動化測試框架
    隨著該程式語言的廣泛使用,基於Python的自動化測試框架也應運而生,且不斷發展與豐富。因此,開發與測試人員在為手頭的項目選擇測試框架時,需要考慮許多方面的因素,其中包括:框架的腳本質量,測試用例的簡單性,以及運行模塊可能存在的技術弱點。為了避免出現「選擇困難症」,我在此為大家準備了五種Python類型的自動化測試框架,以供比較和討論。
  • 測試也是Android開發的重要部分,單元測試和UI測試上手實踐
    ,並不需要一個真實的數據源,只需要通過 Mockito 框架,mock 出一個測試用的 DataManager 和 V 層代理。所謂的 mock 就是創建一個類的虛假的對象,在測試環境中,用來替換掉真實的對象,以達到驗證對象方法調用情況,或是指定這個對象的某些方法返回特定的值等;@Before 註解的方法會在執行測試用例之前執行,這裡做一個初始化的操作,主要是 Mockito 框架的初始化及 presenter 的初始化;@After 註解的方法會在執行測試用例之後執行,這裡做一個 presenter 的 detach