Android測試(二):Android 測試基礎

來源:互聯網
上載者:User

標籤:google   互動   block   tomat   社區   結構   config   date   特性   

Android測試(二):Android 測試基礎

發布時間 2017年12月20日 蟲師

原文:https://developer.android.com/training/testing/fundamentals.html

使用者在不同的層級上與你的應用產生互動。從按下按鈕到將資訊下載到他們的裝置上,因此,你應該在反覆式開發法應用程式時測試各種用例和互動。

使用反覆式開發法工作流程

當你的應用程式進行擴充時,你可能會發現需要從伺服器擷取資料,與裝置的感應器進行互動,可以還需要訪問本機存放區,或呈現複雜的使用者介面。應用程式的多樣性需要一個全面的測試策略。

在反覆式開發法一個新的特性時,首先需要編寫一個新的測試,或者在現有單元測試中添加新的測試例和斷言。測試一開始是失敗的,因為這個新特性還沒有實現。

在設計新功能時,考慮單元測試的設計很重要。對於每個功能單元編寫一個相應的單元測試。你的單元測試應該盡可多的涵蓋到所有可能與單元的互動,包括標準的互動、無效的輸入、以及資源停用情況。

圖:測試驅動開發:兩個周期與迭代過程。

完整的工作流程,如,包含一系列嵌套的迴圈迭代。其中長、慢、UI驅動的整合測試,你可以用更短、更快的單元測試驅動開發週期來完成。這一系列迴圈一直持續到你的應用程式滿足每個用例為止。

測試金字塔

圖:測試金字塔,顯示應該在應用程式的測試套件中包含的三個測試類別。

測試金字塔,如所示,說明你的應用程式應該如何包括三種類型的測試:小測試、中測試和大測試。

  • 小測試是你可以在與生產系統隔離的情況下啟動並執行單元測試。它們通常會mock所有主要組件,並在PC上快速運行。

  • 中測試是介於小測試和大測試之間的整合測試。它們整合了幾個組件,並在Android模擬器或真實裝置上運行。

  • 大測試是通過完成UI工作流程來啟動並執行整合和UI測試。它們確保關鍵的終端使用者任務在Android模擬器或真實裝置上正常工作。

註:這裡測試金字塔的定義是Google針對Android應用的測試劃分。不同類型的應用,通過測試金字塔模型進行劃層級的劃分,以及每層的定義會有所不同。

儘管小測試的速度很快,而且重點突出,可以讓您快速處理失敗,但它們是低傳真和獨立的,讓你很難相信通過測試的應用是可以正常啟動並執行,所以需要通過大測試進行補足。

由於每個測試類別的不同特性,你的測試工作應該包含測試金字塔的每一層測試。儘管每個類別的測試比例可能因應用程式的使用方式而有所不同,但我們通常建議以下分類:70%的小測試、20%的中等測試和10%的大測試。

小測試

在添加和更改應用程式的功能時,通過建立和編寫單元測試來確保這些功能按照預期的來運行。雖然可以在Android模擬器或真實裝置中運行單元測試,但是在開發環境中運行單元測試通常會更快、更容易,根據需要添加Stub或mock方法實現與Android系統進行互動。

Robolectric

如果你的應用程式的測試環境要求單元測試與Android架構進行更廣泛的互動,那麼你可以使用Robolectric。此工具執行測試友好、基於Java 邏輯Stub來類比Android架構,由社區來維護這些Stub。

Robolectric測試幾乎完全符合Android裝置上運行測試的完全逼真度,但仍比裝置測試回合得更快。它還支援Android平台的以下幾個方面:

  • Android 4.1(API等級16)及更高版本
  • Android Gradle外掛程式2.4及更高版本
  • 組件生命週期
  • 事件迴圈
  • 所有資源

Robolectric有自己的一套測試API,並引入了一些新概念。有關將Robolectric的API與應用程式的測試相結合的更多資訊,請參見該工具的 使用者指南

Mock對象

你可以通過修改Android.jar版本來運行單元測試,從而來監控應用與之互動的Android架構元素。這個JAR檔案不包含任何代碼,所以你的應用程式調用Android架構預設會拋出異常。 要測試與Android系統互動的代碼元素,請使用像Mockito這樣的架構來配置類比對象。

檢測單元測試

你也可以在Andorid模擬器或真實裝置上運行檢測單元測試,而不涉及任何stub或mock架構。因為這種測試形式的執行時間明顯比本地單元測試慢,所以最好僅在需要評估應用程式對當前裝置硬體的行為時才依賴此方法。

中測試

在開發環境中測試了應用程式的每個單元之後,應驗證在模擬器或裝置上運行時組件的行為是否正確。 中等測試允許您完成這部分的開發過程。 如果某些應用程式的組件依賴於物理硬體,則這些測試對於建立和運行尤其重要。

中等測試你的應用程式如何協調多個單元,但它們不測試完整的應用程式。中等測試的用例包括服務測試、整合測試以及mock外部依賴性行為的UI測試。

通常情況下,最好在Android模擬器或Firebase測試實驗室等雲端式服務上測試應用程式,而不是在真實裝置上測試應用程式,因為你可以更輕鬆,快速地測試多種螢幕大小和硬體設定組合。

大測試

儘管測試應用程式中的每一層的功能是非常重要的,但是測試涉及整個堆棧的常見工作流程和用例(從UI到商務邏輯到資料層)同樣重要。

如果您的應用程式足夠小,則可能只需要一套大型測試來評估你的應用程式。 否則,你應該根據團隊所有權,垂直功能或使用者目標來劃分你的大型測試套件。

對於你所編寫的每一個大型的基於工作流程的測試,你還應該編寫中測試來檢查工作流程中包含的每個UI組件的功能。通過這種方式,即使在最初的幾個步驟中,相應的大型測試也會失敗了,你的測試套件仍然可以在關鍵使用者操作的每一步中繼續識別潛在的問題。

AndroidJUnitRunner類定義了一個基於JUnit架構的測試回合器,它允許你在Android裝置上運行JUnit 3或JUnit 4樣式的測試類別。便於將測試包和應用程式載入到真實裝置或Android模擬器上,運行測試並報告結果。

AndroidJUnitRunner類支援來自Android測試支援庫的以下工具和架構:

JUnit4 Rules

測試說明語言套件括用於管理的關鍵應用程式組件的生命週期涉及你的測試代碼,如Activitie 和Service。學習如何定義這些規則,看到 JUnit4規則指南

Espresso

Espresso同步非同步任務,同時自動執行以下應用內互動:

在View對象上執行操作。 * 完成跨越應用程式進程邊界的工作流程。僅在Android 8.0(API層級26)及更高版本上可用。 * 評估具有協助工具功能需求的使用者如何使用你的應用。 * 尋找並啟用RecyclerView和AdapterView對象中的項目。 * 驗證傳出意圖的狀態。 * 在WebView對象中驗證DOM的結構。 * 跟蹤你的應用程式中長時間啟動並執行後台操作。

要詳細瞭解這些互動以及如何在應用程式的測試中使用它們,請參閱 Espresso指南。

UI Automator

我們建議僅當你的應用程式必須與系統進行互動的操作時,才使用UI Automator來測試你的應用程式。 由於UI Automator與系統應用程式UI互動,因此你需要在每次系統更新後重新運行並修複UI Automator測試。 此類更新包括Android平台版本升級和Google Play服務的新版本。

作為使用UI Automator的替代方案,我們建議添加封閉測試或將大型測試分為一系列小型和中型測試。特別是,一次側重於測試一個應用程式間通訊,例如將資訊發送到其他應用程式,並對意圖結果進行響應。Espresso-Intents工具可以協助您編寫這些較小的測試。

UI Automator架構在你的應用程式的系統應用程式內執行互動,例如檢查當前顯示UI的階層、截取螢幕以及分析裝置的目前狀態。有關UI Automator如何檢查正在測試的應用程式的更多詳細資料,請參閱 UI Automator指南 。

Android Test Orchestrator

Android Test Orchestrator在其自己的Instrumentation沙箱中運行每個UI測試,通過減少測試之間的共用狀態並在每個測試的基礎上隔離應用程式崩潰來提高測試套件的可靠性。

Android測試(二):Android 測試基礎

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.