Google+ 團隊的 Android UI 測試

來源:互聯網
上載者:User

標籤:

https://github.com/bboyfeiyu/android-tech-frontier/tree/master/android-blog/Google%2B%20%E5%9B%A2%E9%98%9F%E7%9A%84%20Android%20UI%20%E6%B5%8B%E8%AF%95

 

 

Google+ 團隊的 Android UI 測試
  • 原文連結:How the Google+ Team Tests Mobile Apps
  • 譯者:allenlsy
  • 譯者博文地址:http://allenlsy.com/android-ui-tests-in-google-plus-team/
  • 校對者:

Android 測試主要分為3個類型:

單元測試(Unit Test)

區分UI代碼和功能代碼在Android開發中尤其困難。因為有時Activity既有Controller的功能,又有View的功能。Robolectric是一個很優秀的Android測試架構,它提供了一個Android架構的stub,這樣測試回合時實際上是在JVM上運行,而不是在Android平台(比如Robotium和Instrumentation都是在Android平台運行測試),從而提高了速度。另外請參考Gradle 對 Unit tests的支援。

封閉UI測試 (Hermetic UI Test)

這個測試方法使得測試不需要外部依賴和網路請求。這樣做的主要目的是提高測試速度,減少測試時的外部影響,畢竟網路調用是相對很慢的。Espresso可以用來類比使用者的UI操作。

Monkey Test

Monkey Test 就好像一隻猴子在測試app一樣,沒有任何規律的在你的app上胡按。電腦運行monkey test的時候,每秒鐘能做出幾千個UI動作(可以配置這個頻率),比如點擊和拖拽。所以這個測試可以算是一個壓力測試,用來檢測ANR。

Google+ 團隊總結了一些 UI 測試時的經驗和策略。

策略1: 不要使用 End-to-end 測試作為UI測試

先看一些定義:UI 測試 是為了確保對於使用者的UI動作,app能返回正確的UI輸出。End-to-end測試(E2E test) 是通過用戶端和後台伺服器的互動測試整個系統。下面這個圖在展示了測試步驟:

通常做UI測試,你需要後台伺服器,所以可能產生網路調用。所以UI測試和E2E測試很像。但是在E2E測試中會遇到很多困難:

  • 測試速度緩慢
  • 網路請求會失敗
  • 難以Debug

下面看看如何解決這些問題。

策略2:使用偽伺服器做封閉UI測試

這個策略中,你可以通過假的後台伺服器來避免網路請求,以及其他外部依賴。技術上,你就需要在app本地提供返回資料了。有很多辦法可以做到,比如手動做一次網路請求,把response儲存下來,在測試的時候重複這個response。這樣你就做了一個封閉在本地的偽伺服器

當你有了這個偽伺服器,你還需要給這個偽伺服器寫測試。於是這是,你的E2E測試就分為了伺服器測試,用戶端測試和整合測試。

現在這樣的解決方案,你需要自己維護偽伺服器,本機資料庫和tests了。

下面這是E2E 測試的樣本圖:

這是使用了偽伺服器的封閉UI測試

其區別在於:Frontend Server的幾個資料來源變了。由原來的真實後端,變成了封閉伺服器,或者是mock伺服器。這個在測試調用網路API的時候非常有用。

策略3:使用Dependency Injection

Dependency Injection(依賴注入)可以協助產生測試資料。我推薦選擇使用dagger作為依賴注入架構。

依賴注入在UI test和unit test都中都可以用於產生假資料。在instrumentation test架構中,測試用的apk檔案和測試時啟動並執行app,是在同一個進程下面,所以測試代碼可以調用app代碼。你還可以覆蓋app的classpath,通過這種方式注入假資料。比如你可以用依賴注入來偽造一個網路連接的實現,調用這個網路連接的時候就可以提供假資料。

策略4:把app分為小的libraries

這個方法可以更好地模組化你的app。你的app被分為更小的類庫之後,你可以為這些類庫添加他們自己的UI依賴或gradle庫依賴。

當你有了自己的庫,並提供依賴注入的支援,那麼你可以為各個庫寫測試app。最後,可以寫整合測試來確保類庫直接的合作正確。

比如我們有一個登陸功能的庫,那麼我可以寫一個測試app只為這個登陸功能庫:

總結:
  1. 不要用E2E測試來代替UI測試。更好的做法是用單元測試 + 整合測試 + UI測試。
  2. 使用封閉測試策略
  3. 使用依賴注入
  4. 把app分為不同的小工具小類庫,並分別寫測試,然後再寫整合測試來確保各組件之間的互動正確。
  5. 模組化 UI 測試已經被證明了比E2E測試快,並且十分穩定。這樣的測試又能極大的提高開發效率。

Google+ 團隊的 Android UI 測試

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.