1. 程式人生 > >iOS自動化測試之UI自動化框架調研

iOS自動化測試之UI自動化框架調研

有哪些可用的UI自動化框架?*

這裡寫圖片描述

他們的區別在哪裡?

這裡寫圖片描述

我們是如何選擇的

條件1:支援移動端app自動化

       從以上對比其實已經可以比較明確的幫助大家做出自己的選擇,從我所在的團隊來講,我們主要做的是移動端的UI自動化,相信現在大多數同學所做的也都是這一類的自動化,因此,僅限於PC端webApplication的幾個框架就不可避免的要排除掉了,這其中包含Selenium,PhantomJS,以及KARMAR。

條件2:支援多平臺自動化

       此外,對於移動端的UI自動化,我們希望可以同時覆蓋安卓以及iOS平臺,最好是一套指令碼能同時在兩個端上跑,鑑於此,只提供單一平臺的Selendroid,Robotium可以暫時不用考慮了。

條件3:學習成本低

       經過上面兩次篩選,我們的選擇剩下了Macaca && Appium && Calabash,這其中,Macaca以及Appium都是支援多語言的,Appium支援的最多,包含了Ruby Python Java Js OC PHP C#(.Net)這些幾乎所有主流的語言,Macaca目前支援Js Java以及Python,也能基本滿足需要,相比之下,Calabash只支援Ruby,這個對團隊是有一定的挑戰的,因為我們的團隊大家基本上以Java技術棧為主,如果採用Ruby,意味著所有的同學都要先學習一下這門語言,這個成本對於我們這樣的團隊而言成本是很高的,因此,Calabash也從我們的待選list中刪除。

最後的抉擇

       經過三輪篩選,目前擺在我們面前的有兩個選擇,Appium && Macaca,經過一段時間的對比調研,我們最終選擇了Macaca,主要考慮因素如下:

1、周邊工具支援

       相對Appium,Macaca提供了更加全面的周邊工具支援,這其中包含可持續整合平臺Reliable,元素查詢工具app-inspector,指令碼錄製工具UI-Recorder等。

       Reliable持續整合平臺可以幫助我們進行用例的管理以及任務的排程,對於UI自動化,只有當他成為一種規範化的程式定期的觸發與執行,這樣才能發揮他的作用,因此,一個持續整合系統對於自動化的長期發展是必不可少的,而Appium並沒有提供這套系統,這意味著我們需要從無到有的搭建自己的一套持續整合環境,這個投入無疑也是巨大的。

       app-inspector 元素查詢工具,極大的方便了控制元件的查詢以及定位。

       UI-Recorder指令碼錄製工具可以快速的通過錄製得到指令碼,方便新手入門。

       具體的使用可以參考官方網站,都有詳細的介紹。

2、輕量

       從功能上來講,Appium較Macaca是有優勢的,Appium已經發展了多年,積累了很多經驗,但是也造成了一些尾大不掉的毛病。以對安卓API版本的支援為例,Appium支援所有的安卓API版本,而Macaca只支援API>17(相當於Android4.2系統)的版本,這個跟兩者的底層原理有關,Macaca對於安卓的支援是基於安卓sdk的UIAutomator框架,而這個框架是從API 17開始支援的,Appium從最早的安卓開始,對於API 17以上的版本,Appium與Macaca一樣是基於UIAutomator的,對於API 17以下的版本,Appium則基於老的instrument,對於這部分的支援,還引入了Selendroid。但是從應用的角度講,Android7已經發行,4.2系統以下的裝置佔比不大,我們不希望為了支援這部分少量的機型而增加自己在自動化上的工作量。簡單來講,大而全的並不一定是最好的,關鍵是找到適合自己的。

3、社群活躍,中文文件豐富

       Macaca是由阿里集團開源的框架,官方網站提供了中文版以及英文版雙語文件,雖然對於開發者而言,閱讀英文文件的能力是必須的,但是中文文件的提供無疑能幫助很多基礎相對薄弱的同學快速入門。此外,Macaca團隊還提供了用於技術交流的微信群以及釘釘群,當遇到問題的時候可以方便的聯絡到主創團隊的相關同學,這無疑也能給大家帶來很大的方便。

4、平臺更豐富

       雖然Macaca和Appium同時都支援PC與移動端,但是Macaca新增了對於Electron應用的支援,這個是其他框架都不具備的,雖然作為一個Node.js小白我沒有接觸過相關的應用,但是相信對Electron的開發者以及測試同學來說,這是一個不錯的選擇。

5、API的統一性

       研究過Appium的官方API,以java-client為例,針對iOS和安卓,控制元件以及Driver等類別都根據平臺不同而不一樣,對於控制元件,有AndroidElement,IOSElement,對於Driver,有AndroidDriver,IOSDriver,如果我們的用例要支援多平臺,就需要處理多種平臺不一致性,但Macaca從底層上就沒有區分iOS與安卓,基本上除了各自系統特有的幾個API以外都可以通過一個統一的API支援,這就方便了很多。

       參考資料: