自動化測試框架: KIF和EarlGrey

作為最流行的手機(jī)系統(tǒng)之一,Apple一直重視自動化測試。在instrument中包含Automation Test工具,但因?yàn)橹恢С諮avascript,普及率不高。iOS 9后針對OC和Swift又新增了UI Test模塊,只支持iOS 9以上,所以暫時用的不會太多。一些第三方自動化測試框架則比較成熟,如Appium, MonkeyTalk,F(xiàn)rank等,這里介紹KIFEarlGrey,原因:

  • 開源
  • 內(nèi)嵌式框架 (以 framework 形式內(nèi)嵌至應(yīng)用中) , 本質(zhì)上是iOS的Unit test
  • 使用Object-CSwift
  • 支持真機(jī)和模擬器

EarlGrey

兼容: iOS 8以上
特點(diǎn)

  • 同步
    自動同步UI,網(wǎng)絡(luò)請求,main Dispatch Queue和main NSOperationQueue,保證下一個UI交互只在空閑時發(fā)生,也支持對同步的管理。
  • 可見性檢查
    保證交互只發(fā)生在用戶可以看到和操作的對象上。(線程外的模態(tài)對話框會干擾操作)
  • 像用戶一樣操作
    區(qū)別于其它自動化測試框架,操作觸發(fā)app-level事件而不是element-level事件,動作會真實(shí)的表現(xiàn)在界面上。

官方的安裝和使用教程都很詳細(xì),主要看GitHub上的文檔:EarlGrey in GitHub

KIF

兼容: iOS 5.1以上
特點(diǎn)

  • 最小化迂回時間
    繼承KIFTestCase,測試代碼都是使用OC編寫,最大程度減少了中間層。
  • 配置簡單
    直接集成到XCode上,不需要安裝多余的包。
  • 版本覆蓋廣
    支持iOS 5.1以上。
  • 像用戶一樣測試
    測試代碼模仿用戶操作,代碼很簡單。
  • 自動集成XCode 5以上的測試工具
    在XCode上使用就像使用蘋果原生的測試框架一樣,支持XCode的各種測試工具。

因?yàn)镵IF出的較早,很多特性在當(dāng)時都是很大的亮點(diǎn),后來的框架有很多都是在向它學(xué)習(xí)。
GitHub上的文檔比較簡單,這里推薦它的API文檔:KIF Doc

EarlGrey Vs KIF

EarlGrey和KIF算是比較像的兩個框架,但也存在一些區(qū)別,了解它們的區(qū)別有利于做出適合自己的選擇。

  • EarlGrey寫法多樣,操作靈活;KIF比較簡單,適合快速開發(fā)

比如點(diǎn)擊登錄按鈕, KIF:
[self tapViewWithAccessibilityLabel:@"登錄"];

EarlGrey中找元素和操作元素分開,所以

[[EarlGrey selectElementWithMatcher:grey_accessibilityID(kAccessibilityId_EnterLoginBtn)]
 performAction:grey_tap()]

如果位于scrollview中, EarlGrey還需要考慮滑動搜索:

[[[EarlGrey selectElementWithMatcher:grey_allOf(grey_accessibilityID(kAccessibilityId_EnterLoginBtn), grey_sufficientlyVisible(), nil)]
 usingSearchAction:grey_scrollInDirection(kGREYDirectionDown, kMoveAmount) onElementWithMatcher:grey_accessibilityID(kAccessibilityId_LoginScrollView) ]
 performAction:grey_typeText([NSNumber numberWithFloat:goodsPrice].stringValue)];

雖然代碼相對復(fù)雜,但EarlGrey的好處在于,分離之后操作變得多樣,可以有Matcher+Action, Matcher+Assert, Matcher+Action+Error等多種組合,錯誤更容易被發(fā)現(xiàn)。
比如檢查登錄按鈕,

NSError *error = nil;
[[EarlGrey selectElementWithMatcher:grey_accessibilityID(kAccessibilityId_EnterLoginBtn)]
 assertWithMatcher:grey_sufficientlyVisible() error:&error];

另外,被error捕獲的操作不會使測試結(jié)束。

  • EarlGrey支持同步;KIF需要手動等待

由于EarlGrey采用了同步機(jī)制,所以保證了下一個操作的執(zhí)行;對需要等待的操作,KIF需要手動添加等待事件,如:
[tester waitForAnimationsToFinish]
KIF中用于等待的方法很多,具體參看 KIFUITestActor Doc

  • EarlGrey建議使用AccessibiltyIdentifier;KIF使用AccessiblityLable

兩個框架都是利用Accessibility來找元素,EarlGrey中建議使用AccessibiltyIdentifier,而KIF中大部分的API只支持AccessiblityLable,所以如果使用的是KIF,就只能去修改控件的AccessiblityLable。

  • EarlGrey支持拍照,可以存在任何地方;KIF失敗自動拍照,只能存在固定地方。

EarlGrey使用,
[GREYScreenshotUtil takeScreenshot]
返回UIImage對象,可以存到任何地方包括相冊。
KIF測試失敗會自動拍照保存,不過需要事先指定存儲路徑。
方法:
1.打開Edit Scheme->Test->Arguments
2.添加Enviroment Variables,名字是KIF_SCREENSHOTS,內(nèi)容為指定的存儲路徑。對于真機(jī),必須先獲取應(yīng)用的路徑然后指定一個位置在KIF_SCREENSHOTS中寫死。

總結(jié)

KIF的語法比較簡單,適合快速開發(fā),網(wǎng)上相關(guān)的資料也比較多;但是,作為后來者的EarlGrey功能更加強(qiáng)大,作為一個程序員,我更傾向于使用EarlGrey。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,376評論 4 61
  • 轉(zhuǎn)載自:https://github.com/Tim9Liu9/TimLiu-iOS 目錄 UI下拉刷新模糊效果A...
    袁俊亮技術(shù)博客閱讀 12,147評論 9 105
  • 我把一片云分作兩半看 一半是你 一半是我 從未如此悠閑地 兩相對望 我們的手牽著 卻很快散開 相互擁抱 很快又分離...
    王子騫閱讀 266評論 1 5
  • 我一直在follow一個臺灣女生的臉書。今天她寫了這樣一段話:“離開環(huán)境公益律師的工作多年,很久沒有這樣的感覺,很...
    生如如花閱讀 560評論 0 3

友情鏈接更多精彩內(nèi)容