Google開源了Espresso,這是一種Android自動化測試框架,使測試人員可以在云中x86機器的多線程環境里運行測試,并解決了關于UI測試的并發問題。
由于Android設備數量和種類眾多,在真實的設備上運行測試非常耗時,而且成本很高。一種解決方案是在模擬器上執行測試。模擬器是一個可控的環境,支持多種OS版本、屏幕尺寸和內存限制。這種方法可以捕獲大部分代碼Bug,剩下的Bug可以留給真實設備測試和人工測試去發現。
模擬器的問題是執行速度,其中,在模擬的ARM CPU上運行Android是一個瓶頸。為了解決這個問題,Google已經創建了可以直接在x86硬件上運行的Android版本,并使用了VM加速。另一個瓶頸是Android的啟動時間。該問題已經通過抓取OS快照并執行快照得以解決。該方法可以在很短的時間內提供期望的OS和應用程序配置。早在今年3月份,Google就已經使用該方法完成了8200萬次Android測試。
通過比較在Nexus 4和模擬器上的測試發現,后者需要真實設備上測試時間的65%來完成測試。因此,一個好的模擬器似乎已經解決了自動化測試問題。但是,還有另一塊絆腳石。自動化測試使用Android的Instrumentation API,這些API的調用在一個與UI線程不同的線程中運行,因此,使用自動化方法測試用戶界面會導致嚴重的并發問題,進而產生不一致不可靠的測試結果。 Google對這個問題的解決方案是Espresso,它是一個測試框架,能夠使UI測試在多線程環境中安全地運行,并移除了關于編寫測試的大部分樣板代碼。Espresso可以跨各種移動設備工作,包括電話、電視、智能眼鏡、汽車等。它還可以跨不同屏幕尺寸和內存大小、多個API版本以及不同網絡工作。據Espresso幕后團隊介紹,他們的解決方案捕獲了Android和應用程序中99%的Bug,只給真實設備測試和人工測試留下了少數Bug,減少了整體的測試工作量。
下面是Espresso中斷言視圖未顯示的測試示例:
onView(withId(R.id.bottom_left)).check(matches(not(isDisplayed())));
讀者可以在這里找到其它測試示例。
目前,Espresso還處于開發人員預覽狀態,在Google Code上提供。但思路是,等到它足夠成熟和穩定以后,將其遷移到Android SDK中。Google使用Espresso測試了他們自己的超過30個應用程序,包括G+、Maps和Drive。
原文轉自:http://www.infoq.com/cn/news/2013/10/google-espresso-testing