編輯:關於Android編程
通過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)頁面查看更多信息。
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部分的“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)在Android Studio中直接創建。
圖4.通過在Firebase Test Lab上多部設備上運行後的輸出
上一篇遺留了兩個問題。1、還是無法卸載;2、必須手動去點擊應用程序進入程序,再點擊按鈕,這顯得很麻煩。這一篇就解決上面兩個問題,做出最好的效果。首先解決無法卸載問題:在清
前言:在Android開發中,對於圖片的加載可以說是個老生常談的問題了,圖片加載是一個比較坑的地方,處理不好,會有各種奇怪的問題,比如 加載導致界面卡頓,程序crash。
總體上Music App分為UI界面、服務兩個模塊,其中關於音樂文件的播放都由服務負責,服務配合AIDL使用的,界面綁定服務後可以拿到服務裡所有參數及狀態進行UI刷新。A
最近在做APP,需要監聽Android手機網絡的變化情況,同時對不同的情況做出不同的響應策略,這裡有兩種方法。判斷聯網工具類這裡我使用的是ConnectivityMan