通過了一段時間的醞釀後,Google很高興地宣佈了EarlGrey,一款針對於iOS的功能性UI測試框架。諸如YouTube、Google Calendar、Google Photos、Google Translate、Google Play Music等多款Google應用都成功地採用了EarlGrey框架來知足其功能性測試之所需。xcode
EarlGrey所提供的主要特性以下所示,這些特性使得應用的測試變得更加輕鬆,也更具效率:網絡
強大的內建同步機制:測試會在與UI進行交互前自動等待動畫、網絡請求等事件。這樣,咱們就能夠更加輕鬆地編寫測試了(無需睡眠,也沒必要再等待了),同時維護起來也更加容易(很是直觀,整個測試看起來就是一系列描述而已)。通常來講,你無需考慮同步性,由於EarlGrey會自動同步UI、網絡請求、主Dispatch
Queue以及主NSOperationQueue。爲了支持在下一個UI交互發生前須要等待某個事件出現這種場景,EarlGrey提供了Synchronization APIs,你能夠經過他們來控制EarlGrey的同步行爲。你可使用這些APIs來加強測試的穩定性。框架
可見性檢測:全部的交互都發生在用戶能夠看到的元素上。好比說,嘗試輕拍圖片後面的按鈕會致使測試馬上失敗。EarlGrey使用了屏幕截圖區分比較(也叫作「screenshot diffs」)在與UI元素交互前肯定其可見性。這樣,你就能夠肯定對於EarlGrey與之交互的UI,用戶能夠看到而且也能與之交互。值得注意的是,進程外(即系統生成的)警告視圖與其餘會遮蓋住UI的模態對話框會對這個過程產生干擾。工具
靈活的設計:用於肯定元素選擇、交互、斷言與同步的組件在設計上就是可擴展的。輕拍與滑動是經過應用級的觸摸事件來實現的,而不是使用元素級的事件處理器。在每一次UI交互前,EarlGrey都會斷言交互的元素是可見的,而不只僅是存在於視圖層次體系中就好了。EarlGrey的UI交互模擬了真實用戶與應用UI交互的方式,能夠幫助你找到並修復用戶在使用應用時所遇到的一樣的Bug。post
EarlGrey是個原生iOS UI自動化測試框架,能夠幫助你編寫出更加清晰、簡明的測試。藉助於EarlGrey框架,你可使用加強的同步特性。EarlGrey會自動與UI、網絡請求及各類查詢保持同步,同時在必要的狀況下,你還能夠手工實現自定義的定時器。EarlGrey的同步特性能夠確保在執行動做前,UI會處於一種穩定的狀態。這極大地加強了測試穩定性,使得測試變得高度可重複。EarlGrey與XCTest框架協同工做,而且集成到了Xcode的Test Navigator中,這樣你就能夠直接在Xcode中或是在命令行中(使用xcodebuild)運行測試了。單元測試
EarlGrey的用戶文檔位於EarlGrey/docs目錄下。要想上手,請先查看一下EarlGrey的特性,看看其向後兼容性,而後經過測試目標來安裝/運行EarlGrey。配置完畢後,請查看一下EarlGrey API,而後開始編寫本身的測試。測試
下面來介紹一下如何安裝EarlGrey,以及如何建立並運行第一個測試。動畫
要想正常使用EarlGrey,請確保被測試的應用知足以下需求:ui
正確的啓動界面圖片能夠在全部支持的設備上出現(參見iOS Developer Library,Launch Files)。spa
主UIApplicationDelegate實現了(UIWindow *)window屬性(參見UIKit Framework Reference,window屬性)。
最後,請確保在測試目標上啓動斷言(即不要設置NS_BLOCK_ASSERTIONS)。能夠經過兩種方式將EarlGrey添加到Xcode項目中:使用CocoaPods,或是以框架的形式。
對於EarlGrey來講,咱們強烈推薦使用CocoaPods進行安裝,這也是咱們認爲的最佳方式。
第1步:建立一個測試目標。
EarlGrey須要一個測試目標。因爲EarlGrey修改了測試目標的Scheme與Build階段,所以咱們建議你爲添加EarlGrey測試建立一個單獨的測試目標。若是尚未建立,那麼能夠在Xcode的Project Navigator中選中項目,而後單擊菜單中的Editor > Add Target...。
在Add Target窗口中,選擇iOS -> Test -> iOS Unit Testing Bundle:
因爲EarlGrey使用了Schemes,所以測試目標必需要有一個與之關聯的Scheme。若是該Scheme是共享的就更好了。若是測試目標沒有Scheme,那麼請轉向Manage Schemes,單擊+按鈕,而後從下拉菜單中選擇目標。選擇Shared選項,而後將Container設爲待測試的應用。
值得注意的是,若是以前建立過Schemes,那麼你須要運行一次才能讓pod安裝命令將其選中。若是在運行pod install以後,測試目標沒有包含對Scheme與Build階段的改變,那麼請再次運行pod install。
第2步:添加EarlGrey並做爲框架依賴
建立好測試目標後(好比說AppFunctionalTests),如今就須要將EarlGrey做爲框架依賴添加進來了。要想作到這一點,請將EarlGrey做爲測試依賴添加到Podfile中。因爲EarlGrey必需要放在待測試的應用中,咱們須要對測試目標的Build Phases與Scheme進行一些修改。將configure_earlgrey_pods.rb文件添加到項目目錄中(在這裏運行pod install命令)。你須要在post_install鉤子中調用這個腳本,使用項目名、測試目標名與xcscheme文件名。
第3步:運行pod install命令
當成功運行了pod install命令後,打開生成的工做空間,在Pods/directory中便可以找到安裝好的EarlGrey。
因爲EarlGrey基於XCTest,所以在Xcode中建立第一個測試就像建立一個新的單元測試用例類同樣簡單。請不要將Unit Test Case Class與UI Test Case Class搞混了。UI Test Case Class使用了添加到XCTest中的新的UI Testing特性,它與EarlGrey並不兼容。
Cmd+Click應用源文件所在的目錄,而後選擇New file...。這時會彈出一個對話框。
在彈出的對話框中選擇Unit Test CaseClass,而後單擊Next。在下一個界面中,輸入測試用例的名字。對於該示例來講,咱們輸入MyFirstEarlGreyTest。
在下一個界面中,請確保測試與Unit Test目標關聯起來。對於該示例來講,目標就是SimpleAppTests。
Xcode會爲咱們建立一個新的測試用例,不過這個用例咱們用不上。咱們來修改其代碼,只留下一個測試方法,幷包含進EarlGrey框架。
如今來添加一個簡單的EarlGrey斷言,檢查一個key window是否存在,並斷言它會顯示出來。下面就是最終的測試代碼:
就是這些了!就像其餘單元測試同樣,該測試會顯示在測試導航器中,所以能夠單擊run圖標或是Cmd+clicking測試名,而後選擇Test「testPresenceOfKeyWindow」來運行測試。因爲這是個常規的單元測試,所以能夠在測試與應用代碼中打斷點,也能夠無縫使用內建工具。
它基於XCTest(XCode自帶的)作了擴展,你能夠理解爲它是一個更好用的XCtest。
這種侵入式的框架(須要在XCode集成或者命令行裏面把測試bundle打到應用裏面),意味着這款工具主要是面向有開發能力的工程師,此外,因爲是白盒測試,因此主要仍是讓開發者們測本身的APP。
所以,若是你是一個獨立開發者,那麼它對你而言會是一款很是棒的測試工具。
EarlGre不能代替基於真機的測試。也就是說APP在真實設備上的兼容性問題,沒法經過軟件模擬的方式暴露出來。若是你想要避免因硬件問題致使的用戶流失,你仍是須要在幾百臺真實手機上對進行APP測試。
當你須要在幾百臺手機上作測試時,自動化的真機測試可以快速幫你解決戰鬥。因此,若是你是一名不具有寫代碼能力的測試工程師,公司又剛好須要你作大規模的真機測試,那麼TestBird所提供的兼容性測試會更加適合你。
目前Testbird爲你們提供免費的兼容性測試體驗(Testbird官方註冊地址)