本篇文章來自 新根 的投稿,是關於Espresso自動化UI測試框架的基礎講解以及案例分析,旨在幫助那些還未入門的朋友了解相關知識,希望大家能更加悠閒地進行UI自動化測試。
新根 的博客地址:
http://blog.csdn.net/hexingen
* Espresso英文文檔,本人翻譯水平有限,可能存在不足。
Espresso 是 Google官方提供的Android UI自動化測試的框架。
使用 Espresso 能寫出簡潔,美觀,可靠的 android ui test。
Espresso 的重要組成部分:
Espresso: 通過 onView() 和 onData() 與view交互的進入點,它的api不依賴任何view。
ViewMatchers: 實現了 Matcher<? super View> 的集合對象。通過 onView() 來定位當前的view 。
ViewActions: 具備操作方法(例如點擊操作)的集合對象,它裡面的操作可以通過 ViewInteraction.perform() 來實現 。
ViewAssertions: 用它可以斷言,查看當前view的狀態,ViewInteraction.check() 會執行它 。
來張 Espresso 的小抄:
建議下載或點擊放大查看
案例:
onView(withId(R.id.main_view)).perform(click()).check(matches(isDisplayed()));
分析:
withId() 通過id獲取到 ViewMatcher;
click() 是一個 ViewAction(即操作);
matches() 是一個 ViewAssertions。
1.普通的 view 用 onView() 加載視圖:
1.1:R.id.xx是唯一的:onView(withId(R.id.main_view))。
1.2:存在 view 的 id 是不唯一的:若是通過以上方法會報錯,com.google.android.apps.common.testing.ui.espresso.AmbiguousViewMatcherException。
2. AdapterView 類型(例如 gridview,listview,spinner)中的 itemView:要通過onData() 加載視圖。
特殊情況: 為了解決 view 中 R.id 問題(可能不存在,不唯一)的問題,獲取view 視圖可以通過自定義(或者已經存在)的 ViewMatchers。
在view中執行一個操作:
在匹配好 指定view(即 onView() 或者 onData())後,可以通過 perform() 來執行 ViewAction:
當前的view可以通過 check() 執行 Assertions 。
通常通過 matches() 使用 assertion,matches() 是通過 ViewMatcher 來斷言當前view的狀態 。
注意點:在 view不顯示 或者 view不在當前視圖中 這兩種情況下,使用assertions 情況。
配置 Espresso, 通過添加以下 靜態jar:
Github 上包含 Android Studio 和 Eclipse 的對應項目(下載全部案例後,使用Eclipse 的,選擇 BasicSampleBundled):
Eclipse的案例
https://github.com/googlesamples/android-testing/tree/master/ui/espresso/BasicSampleBundled
第一步:添加 Android Support Repository,(已經添加的,這步省略)
第二步:在Gridle中 dependencies{} 添加各自需求的jar:
最後別忘記,sync Now。
第三步:創建測試包的路徑,切換到 project 視圖下,找到對應的項目,在 src 下創建一個文件,命名為 androidTest/java,然後在 anroidTest/java 路徑下創建一個包,填入項目的包名(已經存在對應項目的 android test包,省略這步)。
第四步:在 xxx.xxx.xx(androidStudio)下創建對應的測試類,按照 Espresso 使用方式,編寫測試代碼。
第五步:創建 test configuration: Edit Configurations–> +–>Android Tests configuration–>選擇 module 和添加 AndroidJUnitRunner ,name 自己定義,module 選擇要測試的項目 。
最後一步:運行測試項目。
Button點擊 和 ListView的item點擊 測試。
在配置 Espresso的jar 你會發現一些問題:
Error:Conflict with dependency 'com.android.support:support-annotations'. Resolved versions for app (23.3.0) and test app (23.1.1) differ.
See http://g.co/androidstudio/app-test-app-conflict for details.
這是兩個註解包衝突了。
解決方式:採用你當前項目中 com.android.support:support-annotations(個人這邊是23.3.0版)
gradle中jar依賴:
Button所在的xml:
myadapter_item(listView中item)的xml:
MainActivity.java的代碼:
MainActivity對應測試類中代碼(重要點):
注意點:@xx這些註解不能少,導入jar 需通過 static import
運行結果:
基礎Espresso 已經 ok,長徵路漫漫,還有高級Espresso方式測試,待續中!
點擊最後 閱讀原文 可查看源碼地址。
如果你有好的技術文章想和大家分享,歡迎向我的公眾號投稿,投稿具體細節請在公眾號主頁點擊「投稿」菜單查看。
歡迎長按下圖 -> 識別圖中二維碼或者掃一掃關注我的公眾號: