標籤:
通過Espresso測試錄製器來建立UI
注意:Espresso測試記錄器在Android Stuido 2.2中只是一個測試版。
工具Espresso測試錄製器可以讓你不寫任何代碼就可以建立你的UI測試。通過錄製測試情境,你可以錄製與裝置的互動情況,也可以在你的app快照中添加斷言來測試特定的UI元素。Espresso測試錄製器根據儲存的記錄自動產生相應的UI測試檔案。
Espresso測試錄製器的測試檔案根據Espresso Testing 的架構來寫,Espresso Testing的架構是Android Testing Support Library中的API。Espresso的API根據使用者的動作建立簡明和穩定的UI測試檔案.因為互動和斷言沒有直接操作app的介面和組件,運行是成片段的並於也啟動並執行速度效能也不好。
關閉裝置的動畫
在使用Espresso測試錄製器之前,需要關閉測試裝置上所有的動畫,以防出現意想不到的結果。可以查看Testing UI for a Single App頁的“Set Up Espresso”指南,但是需要注意的是測試錄製器在執行save a recording的時候會自動添加依賴所有你不需要手動來進行添加。
錄製一個Espresso測試檔案
Espresso測試檔案寶礦力了兩個主要部分:UI互動和View元素的斷言。UI互動包括使用者可能與你的app進行的點擊和輸入操作。斷言用於檢測螢幕中組件的內容或者組件是否存在。例如,一個Note testing app的Espresso測試包含了點擊一個按鈕的UI互動和通過斷言來檢測按鈕是否存在和note的內容。
這部分將會複習如何通過Espresso測試錄製器來建立測試檔案,還有如何儲存通過錄製自動產生的測試檔案。
錄製UI互動
使用Espresso測試記錄器的步驟如下:
1.點擊Run > Record Espresso Test
2.在選擇目標裝置視窗(Select Deployment Target window),選擇所要記錄測試的裝置。如果需要的話,建立一個新的Android虛擬設備(create a new Android Virtual Device:https://developer.android.com/studio/run/managing-avds.html)。然後點擊OK.
3.Espresso測試記錄器將會觸發項目的重建,所以在通過Espresso測試錄製器與裝置進行互動之前,你必須安裝並且運行該app。在app運行後,Record Your Test視窗將會出現,由於你並未與裝置進行過互動,主面板會顯示“No events recorded yet.”通過與裝置互動來輸出如“tap”和"type"類型的事件。
注意:在互動之前,你可能會看到裝置上出現一個“Waiting for Debugger”或者“Attaching Debugger”的視窗。Espresso測試記錄器使用調試器(debugger)來輸出UI事件。當調試器串連上,快顯視窗將會自動關閉;不要點擊Force Close(強制關閉)。
互動記錄將會在1所示的Record Your Test視窗的主介面顯示。當運行測試時,Espresso測試將會按這些動作的順序來執行。
圖1.輸出UI互動的Record Your Test視窗
註:
點擊Run > Record Espresso Test
選擇目標裝置
彈出Record Your Test介面
點擊Add Assertion,彈出添加斷言框
然後操作裝置,輸出操作事件的日誌
選擇斷言所要測試的控制項
選中的控制項會在右方的螢幕快照中紅色高亮顯示,然後在第二個下拉框中選擇斷言的類型
點擊Save Assertion儲存斷言或者點擊Save and Add Another來添加另一個新的斷言。點擊Save Assertion按鈕後的彈窗中,可以繼續選擇Add Assertion添加斷言,也可以直接點擊Complete Recording來結束。
點擊Complete Recording後,在彈出框中輸入產生的測試檔案的類名,如果不修改則使用預設的,然後點擊Save
在項目中可以看到以剛才點擊儲存時命名的class
點擊MainActivityTest,然後點擊右鍵,選擇Run‘MainActivityTest‘
選擇要啟動並執行目標裝置
點擊OK,然後在window下面的Run視窗會出現MainActivityTest的tab頁並顯示運行進度和資訊
添加斷言來測試UI元素
斷言判斷View元素是否存在和裡面內容的三種方式:
---text is:測試所選View元素中的text中的內容(內容是否與斷言中一致)
---exists:測試所選的View元素是否存在(控制項是否存在)
---does not exist:測試當前的View元素不在當前的View層級中(控制項是否不存在)
為測試添加斷言的步驟如下:
1.點擊Add Assertion.Espresso擷取的UI層級和其它關於該app的狀態資訊的捕捉螢幕的彈框將會出現。在Espresso捕捉到螢幕後,這個彈框會自動關閉。
2.Record Your Test視窗的主介面顯示當前螢幕的布局。選擇快照中所要使用的元素或者在視窗下方的Edit assertion下拉框中選擇要建立斷言的View元素。被選中的View對象將會顯示在紅色的高亮框中。
3.從第二個下拉框中選擇所需要的斷言。Espresso的菜單中填充的是對View元素有效斷言。
---如果選擇的斷言是“text is”,Espresso將自動為選中的View元素添加文本資訊。當然也可以在Edit assertition下面編輯目標斷言所需要的的文本資訊。
4.點擊Save and Add Another來建立另一個斷言或者點擊Save Assertion來關閉斷言介面。
圖2的快照是檢測標題資訊是否為“Happy Testing!”的“text is”斷言
圖2.選擇一個view元素後的編輯斷言框(Edit assertion box)(紅色部分)
當建立斷言的時,甚至在斷言介面還開啟Record Your Test視窗的情況下,你仍可以繼續與app進行互動,Espresso測試記錄器將繼續輸出事件的日誌,但是如果此時正在編輯的斷言,則會將儲存這些互動資訊記錄。
注意:由於Espresso測試錄製器是一個實驗性功能,該工具目前只支援為縱屏添加斷言。儘管橫屏情況下你也可以添加斷言,螢幕捕捉器仍將其顯示為縱向,選中的UI元素的紅色邊界與元素的實際位置並不相符。
儲存錄製的資訊
與app完成互動並且儲存了斷言資訊後,通過下面的步驟來儲存錄製的資訊並且產生Espresso的測試:
1.點擊Complete Recording。然後會出現一個視窗可以選擇所要進行測試的類名。
2.Espresso測試錄製器根據啟動並執行app的包名和開啟的Activity的名字來給產生的測試類別一個唯一的名字。可以通過Test class name來更改類名。點擊Save。
---如果你沒有將Espresso的依賴添加到你的app,一個Missing Espresso dependencies的彈出將在你儲存test的時候彈出。點擊Yes來自動將依賴添加到build.gradle中。
3.當Espresso Test Recorder產生該檔案後會自動開啟,Android Studio在Project建立將測試的類名列出來。
---測試儲存在哪裡取決於你的instrumentation test儲存的位置,和所啟動並執行Activity的位置。例如,Note testing app的測試儲存在你所錄製的項目的目錄src>androidTest>java>com.example.username.appname的檔案夾下。
運行一個本地的Espresso測試
在Android Studio中點擊左側的Project視窗:
1.開啟你所要啟動並執行姓名並且開啟要啟動並執行測試檔案。測試檔案的地址取決於instrumentation test的位置和開啟的Activity的包名。下面的例子示範了Notest testing app的測試檔案將儲存到哪裡:
---如果在Android視圖中,導航到java>com.example.username.appname(androidTest).
---如果在Project視圖中,導航到src>androidTest>java>com.example.username.appname
2.在所要啟動並執行測試檔案上點擊右鍵,然後點擊 Run‘testName‘
---也可以開啟測試的檔案,在類名或者是方法上點擊右鍵。在TTest Your App(https://developer.android.com/studio/test/index.html#run_a_test)頁面查看更多資訊。
3.在選擇目標裝置的視窗,選擇所要啟動並執行裝置。如有必要,建立一個新的模擬器。點擊OK.
註:
項目在Android視圖下,測試檔案的位置
項目在project視圖下測試檔案的位置
在IDE底部的Run視窗中監測測試的進程。Android Studio重新建立並產生了項目,並在Run視窗根據測試的名字開啟一個新的tab頁,3所示。你可以在這個tab頁查看測試是否通過,需要多久來運行。當運行接收,tab頁將輸出“Tests ran to completion”。
圖3.運行本地的Espresso測試後在Run視窗的輸出
更多關於如果寫測試的配置,查看Create and Edit Run/Debug Configurations(https://developer.android.com/studio/run/rundebugconfig.html#creating部分的“Defining a test configuration for a class or method”。
通過Firebase Test Lab運行一個Espresso的測試
你可以通過Firebase Test Lab來將Espresso測試錄製器產生的測試檔案運行在雲端的各種不同配置資訊的裝置中。通過為你的app建立一個Firebase項目,然後根據說明 Run your tests with Firebase Test Lab(https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html#run-ctl)在Android Studio中直接建立。
圖4.通過在Firebase Test Lab上多部裝置上運行後的輸出
Android Studio 2.2 Espresso Test Recorder-----解放雙手,通過錄製測試過程實現測試