Espresso Android test

如何設計Espresso UI測試程式

王祥宇 2019/12/24 16:39:03
1670

1.Espresso簡介

Espresso是Google於2013年10月發布的測試框架,

會自動執行工程師設計的介面相關的測試內容 常用於進行單一App測試。

(跨App測試也是可以辦到  但不在這次要分享的範圍內)

 

基本上有三個部分

・ViewMatchers-找出當前畫面要控制(測試)的介面單元(小如一個按鈕 大如整個頁面)

・ViewActions-實際執行的操作內容(如滑動、觸碰、按下、、、等)

・ViewAssertions-檢查測試單元的狀態
  (如radio、switch是不是已被check或edittext是不是可以被focus)

 

一個單元的執行範例:

 

照著123的順序便是找出介面單元>>執行操作>>檢查操作後的狀態

來看看實際的程式碼:

第一行、第二行是在畫面找一個id為editTextBirth、addMemberCheck1的元件並檢查是否可使用(focusable)

第三行、第四行是指定整個主畫面並執行back press

第五行是找出整個App名為item_point 且 內容敘述含有“兌換”的物件 逗號後面部分是補充這個物件存在於名為bottom_navigation的物件裡面的位置

然後第六行去執行點擊操作

另外補充ViewMatchers功能為找出『當前畫面』要測試的介面單元,

如果當前畫面並沒有那個id的單元便會出現error

 

補充說明:

如果不方便或是不想使用R.id.XXXX去指定某個元件,也可以改用InstrumentationRegistry去getIdentifier

 

如果要驗證權限有沒有正確的獲得也可以用InstrumentationRegistry的function(因應Android 6.0以上有比較嚴格的權限規範)

 

2.安裝Espresso於編譯器上

這部分簡略說明一下  畢竟可以Google得到很多資料。

要安裝只需要有灌Android Support Library(官方建議用AndroidX取代)

以及在app的build.gradle file去implementation espresso-core (這邊是核心  必要的library)

及其他特殊需要的esspresso library

以下舉幾個特殊需要的esspresso library例子

espresso-intent :提供驗證以及模擬App發出的intent

espresso-contrib:提供對特殊幾個UI的ViewActions

                          (如RecycleView的點擊事件、DatePicker的選取事件、ViewPager的翻頁行為、、、等)

espresso-idling-resource:提供非同步的測試功能

 

如此便可以在project使用Espresso

 

另外建議測試的裝置需要把動畫相關功能關閉

 

由於跑Espresso對CPU負擔有點大,執行上會比較緩慢,

關掉不必要的動畫會比較順暢,

不過要記得開回來就是了,不然之後可能會出現一些永遠找不到的原因的問題。

(像是fragment切換的動畫或animation元件都不會正確顯示,當時還想半天怎麼會突然壞掉)

 

3.其他Espresso相關訊息

如果有很多操作需要自動化,也並非要一行一行一字一字去寫,

Espresso提供了一個功能『Record Espresso Test』,

在Android Studio的工具列的『Run』下方可以找到

點擊後會在虛擬裝置或者是已連結的裝置上執行App

之後任何操作都會被記錄,然後從記錄去複製程式碼並貼上位於app/src/androidTest文件夾內的java file。

 

當然這邊就無法去呈現ViewAssertions的部分,如果有需要還要再針對單元設計,

但這項工具可以比較快速找到想測試的UI元件並以真實的操作流程測試,

之後要做一些不常見操作時只要稍微修改即可。

 

參考來源:

Android user interface texting with Espresso - Tutorial
https://www.vogella.com/tutorials/AndroidTestingEspresso/article.html

Hello Android!來杯 Espresso吧!

https://blog.25sprout.com/hello-android-%E4%BE%86%E6%9D%AF-espresso-%E5%90%A7-d9275a913804

Android Developer

https://developer.android.com/

 

王祥宇