在上一篇文章中,我對本系列教程的項目背景進行了介紹,並對自動化測試平臺的建設進行了規劃。
在本文中,我將在已準備就緒的iOS自動化測試環境的基礎上,通過Appium調用模擬器運行iOS應用。內容很是基礎,熟悉的同學可直接略過。
iOS應用安裝包的基礎知識
作為完全的iOS新手,困惑的第一個問題就是iOS安裝包文件。
在Android系統中,安裝App的途徑很多,除了各類應用市場,普通用戶也經常直接下載apk安裝包文件後手動進行安裝,因此大家對Android的安裝包文件都比較熟悉。
但是對於iOS系統就不一樣了,由於我們普通用戶在iOS上安裝應用的時候基本上只能通過Apple Store進行安裝(未越獄),沒有機會接觸原始的安裝包文件,因此往往連iOS應用的安裝包到底是什麼格式後綴都不清楚。
現在我們想在Appium App中通過模擬器運行被測應用,需要指定iOS app的安裝包路徑,因此需要首先獲得一個iOS app安裝包。
那麼iOS app的安裝包長啥樣呢?
或者在這個問題之前,我們先來看下另一個問題:對於iOS設備來說,如果不通過Apple Store,我們可以怎樣安裝一個應用?
針對這個問題,我搜了些資料,也請教了周圍的同事,了解到的途徑有如下幾個:
企業證書:該種方式適用於企業內部;通過企業證書編譯出的iOS應用,無需上傳至Apple Store,即可無限制的安裝到企業員工的iOS設備中。只是需要解決的一個問題是,由於iOS設備沒有文件管理器,沒法將安裝包拷貝到iOS設備中,因此常用的做法是將安裝包(.ipa文件)上傳至一些下載伺服器(例如fir.im),並生成二維碼,然後用戶掃描二維碼後即可通過瀏覽器下載安裝包並進行安裝。由此聯想到另外一個方法,通過微信文件傳輸助手將安裝包(.ipa)傳輸至iOS設備,然後再進行安裝應該也是可以的吧?這種方法不知在原理上是否可行,因為在試驗時由於安裝包大於30M,微信無法傳輸,所以沒能進行驗證。
Xcode:該種方式適用於iOS開發者;開發者在Xcode中連上iOS設備對源碼進行編譯,編譯生成的應用會自動安裝至iOS設備。當然,該種方式也是需要iOS開發者證書。
PP助手:該種方式適用於普通用戶;PP助手是一個非蘋果官方的設備資源管理工具,可以實現對未越獄的iOS設備進行應用管理,也可以安裝本地.ipa文件,前提是.ipa文件具有合適的籤名。
在上面列舉的安裝應用的途徑中,反覆提到了.ipa文件,那.ipa應該就是iOS應用程式的後綴了吧?暫且這麼認為吧。
再回到前面的場景,要在iOS模擬器中運行iOS應用,我們是否可以找研發人員要一個.ipa安裝包文件,然後就能在模擬器中加載運行應用呢?
剛開始的時候我是這麼認為的。於是我獲取到.ipa文件後,在App Path中填寫該文件的路徑,然後啟動Appium Server;接著我再打開Inspector時,發現iOS模擬器啟動了,但是在應用啟動的時候就出問題了,始終無法正常啟動,感覺像是啟動崩潰,反覆嘗試多次仍然如此。
再次經過Google,總算是明白出現問題的原因了,總結下來有如下幾點:
不管是從Apple Store或iTunes上下載的應用,還是在Xcode中針對真機設備編譯生成的.ipa文件,都是面向於ARM處理器的iOS設備,只能在真機設備中進行安裝;
而在Mac OSX系統中運行的iOS模擬器,運行環境是基於Intel處理器的;
因此,若是針對真機設備編譯生成的.ipa文件,是無法在iOS模擬器中正常運行的,畢竟處理器架構都不一樣;
要想在iOS模擬器中運行應用,則必須在Xcode中編譯時選擇模擬器類型;編譯生成的文件後綴為.app。
準備.app文件
接下來,就說下如何獲取.app文件。
雖然是測試人員,不會對被測iOS項目貢獻代碼,但是也不能總是找研發幫忙編譯生成.app文件。所以,在本地搭建完整的iOS項目開發環境還是很有必要的。
對於iOS開發環境的搭建,當前社區中應該已經有了很多完整的教程,我在這兒就不詳細描述了,只簡單說下我搭建過程中涉及到的幾個點。
首先,Mac OSX、Xcode、Apple Developer Tools這些基礎環境的安裝,在上一篇文章中已經進行說明了;
然後,申請項目源碼的訪問權限,git clone到本地;
接著是項目依賴環境的問題;通常一個較大型的iOS項目都會引用許多第三方庫,而這些依賴庫並不會直接保存到項目倉庫中,通常是採用CocoaPods進行管理;簡單地說,CocoaPods是針對Swift和Objective-C項目的依賴管理器,類似於Java中的Maven,Ruby中的Gem,Python中的pip。
當然,iOS項目的依賴管理工具也不是只有CocoaPods一個,如果是採用的別的依賴管理器,請自行查找對應的資料。
採用CocoaPods管理的項目,在項目根目錄下會包含Podfile和Podfile.lock文件,裡面記錄了當前項目依賴的第三方庫以及對應的版本號。
安裝CocoaPods很簡單,採用gem即可。
$ sudo gem install cocoapods
然後,進入到iOS項目的目錄,執行pod install命令即可安裝當前項目的所有依賴。
$ cd Project_Folder
$ pod install
Re-creating CocoaPods due to major version update.
Analyzing dependencies
(略)
Downloading dependencies
(略)
Generating Pods project
Integrating client project
Sending stats
Pod installation complete! There are 27 dependencies from the Podfile and 28 total pods installed.
關於CocoaPods的更多信息,請自行查看官方網站
在依賴安裝完成後,正常情況下,就可以在Xcode中編譯項目了。
沒有別的需要注意的,將target選擇為模擬器(iOS Simulator)即可。而且針對模擬器進行編譯時,也不會涉及到開發者證書的問題,項目配置上會簡單很多。待後續講到真機上的自動化測試時,我再對證書方面的內容進行補充。
編譯完成後,在Products目錄下,就可以看到XXX.app文件,這裡的XXX就是項目名稱;然後,選中XXX.app文件,【Show in Finder】,即可在文件目錄中定位到該文件。
接下來,將XXX.app文件拷貝出來,或者複製該文件的Full path,怎樣都行,只要在Appium的App Path中能定位到該文件就行。
模擬器中運行iOS應用
被測應用.app準備就緒後,接下來就可以在iOS模擬器中運行了。
回到前面的那張圖。啟動Appium app後,對於模擬器運行的情況,在iOS Settings中必須設置的參數項就3個,App Path、Force Device和Platform Version。對於真機運行的情況,後續再單獨進行說明。
設置完畢後,點擊【Launch】,啟動Appium Server。
然後,點擊圖中紅框處的按鈕,即可通過Inspector啟動模擬器,並在模擬器中加載iOS應用。
在模擬器中,我們可以像在真機中一樣,體驗被測應用的各項功能;並且,在Appium的日誌臺中,可以實時查看到日誌信息。
經歷的一個坑
整個過程是挺簡單的,不過,在探索過程中我還是有遇到一個坑。
通過Inspector啟動模擬器時,總是彈框報錯,報錯形式如下。
剛開始出現這問題時百思不得其解,因為提示的信息並不明顯,Google了好一陣也沒找到原因。最後只有詳細去看日誌信息,才發現問題所在。
在日誌中,發現的報錯信息如下:
[iOS] Error: Could not find a device to launch. You requested 'iPhone 6 (8.4)', but the available devices were: ["iPhone 5 (9.2) [0D79A4CA-71EB-48A6-9EE4-172BEF3EB4E0] (Simulator)","iPhone 5 (9.3) [04270D44-F831-4253-95F2-3D205D2BC0D9] (Simulator)","iPhone 5s (9.2) [13A16C07-3C5B-4B04-A94B-B40A63238958] (Simulator)","iPhone 5s (9.3) [D30A7B34-BA01-4203-80DA-FAEA436725F9] (Simulator)","iPhone 6 (9.2) [5D01650F-2A31-4D53-A47A-CCF7FD552ADD] (Simulator)","iPhone 6 (9.3) [2F0810F6-C73B-4BA4-93BA-06D4B6D96BDA] (Simulator)","iPhone 6 Plus (9.2) [9A840B78-E6CE-4D18-BE83-16B590411641] (Simulator)","iPhone 6 Plus (9.3) [27C6557A-B09D-4D8A-9846-DA8FE0A8E8D5] (Simulator)","iPhone 6s (9.2) [E7F5B8A5-0E85-404F-A4D4-191D63E7EC1B] (Simulator)","iPhone 6s (9.3) [6F702911-13C2-472C-9ECD-BADD4385CB77] (Simulator)"]
問題在於,我設置iOS Settings時,將Force Device設置為"iPhone 6",將Platform Version設置為「8.4」,但是經過組合,iPhone 6 (8.4)並不在可用的模擬器設備列表中。
再來看日誌中提示的可用設備,發現「iPhone 6」設備對應的Platform Version只有「9.2」和「9.3」。然後回到iOS Settings,發現Platform Version的下拉框可選項就沒有「9.2」和「9.3」,最新的一個可選版本也就是「8.4」。
這應該是Appium app的一個bug吧。不過好在Platform Version參數雖然是通過下拉框選擇,但是也可以在框內直接填寫內容。於是我在Platform Version設置框內填寫為「9.3」,然後再次啟動時,發現iOS模擬器就可以正常啟動了。
To be continued ...
現在,我們已經成功地通過Appium Inspector調用模擬器並運行iOS應用,接下來,我們就要開始嘗試編寫自動化測試用例了。
在下一篇文章中,我們將對Appium Inspector的功能進行熟悉,通過Inspector來查看iOS應用的UI元素信息,並嘗試採用腳本語言與UI進行交互操作。