翻譯官方文檔-測試基礎(chǔ)

官方文檔鏈接:https://developer.android.google.cn/training/testing/fundamentals.html

1.前言


之前的文章中大概地描述了進行安卓測試的準(zhǔn)備事項块促,讓大家有個總體的感受歉胶。由于當(dāng)時急著在項目中粗淺地體驗一下铸董,所以了解點皮毛后就沒有繼續(xù)深入了靠抑。直到前不久看了Google I/O大會的資料,才發(fā)現(xiàn)測試驅(qū)動開發(fā)(TDD)是一件很必要的事情微峰,決定好好研究一下伙狐。那從何開始呢?除了大會視頻外痹籍,官方網(wǎng)站的文檔是我最喜歡的學(xué)習(xí)途徑呢铆。

2.測試的重要性


測試應(yīng)用程序是開發(fā)過程的一個組成部分。通過持續(xù)地對應(yīng)用程序進行測試蹲缠,可以在公開發(fā)布之前棺克,驗證它的正確性、功能性和可用性线定。除此之外娜谊,還有以下優(yōu)點:

  • 快速反饋問題。
  • 在開發(fā)周期的早期發(fā)現(xiàn)問題斤讥。
  • 更安全地重構(gòu)代碼纱皆,不用擔(dān)心優(yōu)化代碼時重新引入問題。
  • 穩(wěn)定開發(fā)速度芭商,有助于減少技術(shù)債派草。

用戶在按下提交按鈕到向自己設(shè)備下載數(shù)據(jù)的過程中,與應(yīng)用程序的各個層級交互铛楣。因此澳眷,在迭代開發(fā)應(yīng)用程序時,應(yīng)該測試各種用例和交互蛉艾。

3.使用迭代開發(fā)工作流


隨著應(yīng)用程序擴展钳踊,可能會發(fā)現(xiàn)需要從服務(wù)端獲取數(shù)據(jù)、與設(shè)備傳感器交互勿侯、訪問本地存儲或渲染復(fù)雜的用戶界面拓瞪,一個全面的測試策略必不可少。

迭代開發(fā)功能助琐,從寫一個新的測試或給已存在的單元測試添加用例和斷言開始祭埂。由于還沒有實現(xiàn)功能,第一次測試會失敗。在設(shè)計新功能時蛆橡,考慮劃分出的單元的職責(zé)很重要舌界。每個單元,都需編寫相應(yīng)的單元測試泰演,考慮與它所有可能的交互呻拌,包括正常交互、無效輸入和資源無效的情況睦焕。

Workflow.png

上圖所示的完整工作流包含嵌套的迭代周期藐握,一個長而慢的UI測試周期集成代碼單元的測試,使用更短垃喊、更快的周期測試這些單元猾普,整個周期持續(xù)到應(yīng)用程序滿足每個用例。

4.了解測試層級


下圖的測試層級本谜,展示了應(yīng)用程序應(yīng)該包括三類測試:小型初家、中型和大型:

Pyramid.png
  • 小型測試指單元測試,可以獨立于生產(chǎn)環(huán)境運行乌助。通常模仿每個主要組件溜在,且在開發(fā)機器上快速運行。
  • 中型測試指集成測試眷茁,處于小型和大型測試之間。集成幾個組件纵诞,并在模擬器或真實設(shè)備上運行上祈。
  • 大型測試指集成和UI測試,運行完整的UI工作流浙芙。確保關(guān)鍵的用戶交互任務(wù)登刺,按照預(yù)期在模擬器或真實設(shè)備上運行。

雖然小型測試快速和直接嗡呼,允許迅速發(fā)現(xiàn)問題纸俭,但由于低保真和獨立性,讓人很難相信通過測試的應(yīng)用程序能正常工作南窗,而編寫大型測試正好能彌補揍很。因為每個測試類型有不同的特點,應(yīng)該包含所有層級的測試万伤。盡管每個類型的測試所占比例會根據(jù)應(yīng)用程序的使用情況而不同窒悔,通常推薦以下分配方式:小型占70%,中型占20%敌买,大型占10%简珠。

5.編寫小型測試


當(dāng)添加和改變應(yīng)用程序的功能時,確保它們能通過針對地創(chuàng)建和運行的單元測試虹钮。雖然可以在設(shè)備或模擬器上評估單元聋庵,但在開發(fā)環(huán)境測試單元通常更加快捷和簡單膘融,當(dāng)需要與安卓系統(tǒng)交互時添加樁或模擬方法

5.1.Robolectric

如果應(yīng)用程序的測試環(huán)境要求在單元測試中與安卓框架進行更多的交互祭玉,可以使用Robolectric氧映。這個工具使用對測試友好、基于Java的邏輯樁(由社區(qū)維護)來模擬安卓框架攘宙。它測試的保真度接近于在安卓設(shè)備上運行測試屯耸,同時仍比設(shè)備測試執(zhí)行更快,還支持安卓平臺以下幾個方面:

  • Android 4.1(API 16)及以上版本
  • Android Gradle插件2.4及以上版本
  • 組件的生命周期
  • 事件循環(huán)
  • 所有資源

Robolectric擁有自己的一套測試API蹭劈,并引入一些新的概念疗绣。 有關(guān)將Robolectric的API與應(yīng)用程序的測試集成的更多信息,請參閱該工具的用戶指南铺韧。

5.2.模擬對象

可以通過針對修改后的android.jar運行單元測試多矮,來管理與應(yīng)用程序交互的安卓框架的元素。這個JAR文件不包含任何代碼哈打,所以應(yīng)用程序調(diào)用安卓框架默認(rèn)會拋出異常塔逃。為了測試與安卓系統(tǒng)交互的代碼元素,使用像Mockito這樣的框架來配置模擬對象料仗。如果代碼中包含對資源的引用或與安卓框架復(fù)雜的交互湾盗,應(yīng)該使用不同形式的單元測試,例如Robolectric立轧。

5.3.設(shè)備的單元測試

也可以在物理機或模擬器上運行設(shè)備的單元測試格粪,不需要任何模擬或站樁的框架。因為這種形式的測試執(zhí)行時間明顯慢于本地單元測試氛改,所以僅當(dāng)必須在真實設(shè)備硬件上評估應(yīng)用程序行為時帐萎,才使用這種方法。

6.編寫中型測試


在開發(fā)環(huán)境下測試完應(yīng)用程序的每個單元后胜卤,應(yīng)該在模擬器或設(shè)備上驗證組件行為的正確性疆导,中型測試可以完成這部分的開發(fā)過程。當(dāng)一些應(yīng)用程序組件依賴于物理硬件時葛躏,這樣測試的創(chuàng)建和運行很重要澈段。

中型測試評估應(yīng)用程序如何協(xié)調(diào)多個單元,并不測試整個應(yīng)用程序舰攒,例如服務(wù)測試均蜜、集成測試和模擬外部行為的單獨UI測試。通常情況下芒率,最好在模擬器或類似Firebase測試平臺等基于云的服務(wù)上測試應(yīng)用程序囤耳,而不是在物理設(shè)備上,這樣可以方便快速地測試多種屏幕尺寸和硬件配置。

7.編寫大型測試


盡管單獨測試應(yīng)用程序每個層級和功能很重要充择,但測試完整工作流程和使用涉及UI德玫、業(yè)務(wù)邏輯和數(shù)據(jù)層的測試用例同樣重要。如果應(yīng)用程序足夠小椎麦,可能只需要一套大型測試來評估整體功能宰僧。否則,應(yīng)該通過團隊組成观挎、垂直功能或用戶目標(biāo)劃分大型測試琴儿。

除了編寫大型、基于工作流的測試嘁捷,也應(yīng)該編寫檢查工作流中每個UI組件功能的中型測試造成。這樣,即使相應(yīng)的大型測試在開始的幾個步驟中一直失敗雄嚣,仍然可以通過用戶的每個關(guān)鍵操作識別潛在問題晒屎。

8.AndroidJUnitRunner


AndroidJUnitRunner類定義一個基于設(shè)備的JUnit測試運行器,可以在安卓設(shè)備上運行JUnit 3或JUnit 4樣式的測試類缓升。測試運行器有助于加載測試包和被測試的應(yīng)用程序到設(shè)備或模擬器上鼓鲁,運行測試和報告結(jié)果。此類還支持安卓測試支持庫(ATSL)中的以下工具和框架:

8.1.JUnit4 規(guī)則

ATSL包含測試中涉及管理應(yīng)用程序關(guān)鍵組件生命周期的代碼港谊,如Activity和Service骇吭。要了解如何定義這些規(guī)則,請參閱JUnit4規(guī)則指南歧寺。

8.2.Espresso

Espresso同步異步任務(wù)燥狰,同時自動執(zhí)行以下應(yīng)用程序內(nèi)交互:

  • 在View對象上執(zhí)行操作。
  • 在Android 8.0(API 26)及以上版本支持跨應(yīng)用程序進程完成工作流程成福。
  • 評估有直接需求的用戶能夠如何使用應(yīng)用程序碾局。
  • 定位荆残、激活RecyclerView和AdapterView對象中的items奴艾。
  • 驗證傳出意圖的狀態(tài)。
  • 驗證WebView對象中DOM的結(jié)構(gòu)内斯。
  • 跟蹤應(yīng)用程序中長時間運行的后臺操作蕴潦。

要詳細(xì)了解這些交互及在應(yīng)用程序測試中如何使用它們,請參閱Espresso指南俘闯。

8.3.UI Automator

注意:建議僅當(dāng)應(yīng)用程序必須與系統(tǒng)交互以完成關(guān)鍵的用例時潭苞,使用UI Automator測試。因為它與系統(tǒng)軟件和UI交互真朗,每次系統(tǒng)更新后(包括安卓平臺版本升級和Google Play服務(wù)新版本)此疹,需要重新運行和修復(fù)UI Automator測試。

作為使用UI Automator替代方案,建議增加獨立測試或?qū)⒋笮蜏y試拆分為一系列小型和中型測試蝗碎。尤其是湖笨,每次只關(guān)注應(yīng)用程序內(nèi)一段通信的測試,例如向其它應(yīng)用程序發(fā)送信息和響應(yīng)意圖結(jié)果蹦骑。Espresso-Intents工具有助于編寫這些較小的測試慈省。

UI Automator框架在應(yīng)用程序的支持下,與系統(tǒng)軟件執(zhí)行交互眠菇,例如檢查當(dāng)前顯示UI的層次結(jié)構(gòu)边败、截屏和分析設(shè)備的當(dāng)前狀態(tài)。更多細(xì)節(jié)關(guān)于UI Automator如何才能觀察被測試的應(yīng)用程序捎废,請參閱UI Automator指南笑窜。

8.4.安卓測試控制器

安卓測試控制器讓每個UI測試分別在它們自己的Instrumentation沙盒中運行,通過減少測試和每次獨立測試導(dǎo)致應(yīng)用程序崩潰之間共享的狀態(tài)缕坎,增加測試的可靠性怖侦。更多信息關(guān)于它提供的測試應(yīng)用程序的好處,請參閱安卓測試控制器指南谜叹。

9.總結(jié)


若大家沒用過測試支持庫匾寝,建議認(rèn)真看看官方文檔(上面有提供鏈接,不用擔(dān)心語言問題荷腊,已經(jīng)支持中文了)艳悔,根據(jù)提示安裝相應(yīng)的包,并在項目中配置好Gradle依賴女仰。后面的幾篇文章猜年,將細(xì)細(xì)分析每種測試的使用方式。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疾忍,一起剝皮案震驚了整個濱河市乔外,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌一罩,老刑警劉巖杨幼,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異聂渊,居然都是意外死亡差购,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門汉嗽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來欲逃,“玉大人,你說我怎么就攤上這事饼暑∥任觯” “怎么了洗做?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長彰居。 經(jīng)常有香客問我竭望,道長,這世上最難降的妖魔是什么裕菠? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任咬清,我火速辦了婚禮,結(jié)果婚禮上奴潘,老公的妹妹穿的比我還像新娘旧烧。我一直安慰自己,他們只是感情好画髓,可當(dāng)我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布掘剪。 她就那樣靜靜地躺著,像睡著了一般奈虾。 火紅的嫁衣襯著肌膚如雪夺谁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天肉微,我揣著相機與錄音匾鸥,去河邊找鬼。 笑死碉纳,一個胖子當(dāng)著我的面吹牛勿负,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播劳曹,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼奴愉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了铁孵?” 一聲冷哼從身側(cè)響起锭硼,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蜕劝,沒想到半個月后檀头,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡熙宇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年鳖擒,在試婚紗的時候發(fā)現(xiàn)自己被綠了溉浙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烫止。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖戳稽,靈堂內(nèi)的尸體忽然破棺而出馆蠕,到底是詐尸還是另有隱情期升,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布互躬,位于F島的核電站播赁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏吼渡。R本人自食惡果不足惜容为,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望寺酪。 院中可真熱鬧坎背,春花似錦、人聲如沸寄雀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盒犹。三九已至懂更,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間急膀,已是汗流浹背沮协。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留卓嫂,地道東北人皂股。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像命黔,于是被迫代替她去往敵國和親呜呐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,554評論 2 349