Appium 從 0 到 1 搭建移動 App 功能自動化測試平臺 (1):模擬器中運行 iOS 應用

轉載:https://testerhome.com/topics/4960ios

上一篇文章中,我對本系列教程的項目背景進行了介紹,並對自動化測試平臺的建設進行了規劃。git

在本文中,我將在已準備就緒的iOS自動化測試環境的基礎上,經過Appium調用模擬器運行iOS應用。內容非常基礎,熟悉的同窗可直接略過。shell

iOS應用安裝包的基礎知識

做爲徹底的iOS新手,困惑的第一個問題就是iOS安裝包文件。瀏覽器

在Android系統中,安裝App的途徑不少,除了各種應用市場,普通用戶也常常直接下載apk安裝包文件後手動進行安裝,所以你們對Android的安裝包文件都比較熟悉。服務器

可是對於iOS系統就不同了,因爲咱們普通用戶在iOS上安裝應用的時候基本上只能經過Apple Store進行安裝(未越獄),沒有機會接觸原始的安裝包文件,所以每每連iOS應用的安裝包究竟是什麼格式後綴都不清楚。微信

如今咱們想在Appium App中經過模擬器運行被測應用,須要指定iOS app的安裝包路徑,所以須要首先得到一個iOS app安裝包。markdown

 

 

 

那麼iOS app的安裝包長啥樣呢?網絡

或者在這個問題以前,咱們先來看下另外一個問題:對於iOS設備來講,若是不經過Apple Store,咱們能夠怎樣安裝一個應用?架構

針對這個問題,我搜了些資料,也請教了周圍的同事,瞭解到的途徑有以下幾個:app

  • 企業證書:該種方式適用於企業內部;經過企業證書編譯出的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是針對SwiftObjective-C項目的依賴管理器,相似於Java中的Maven,Ruby中的Gem,Python中的pip

固然,iOS項目的依賴管理工具也不是隻有CocoaPods一個,若是是採用的別的依賴管理器,請自行查找對應的資料。

採用CocoaPods管理的項目,在項目根目錄下會包含PodfilePodfile.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,怎樣都行,只要在AppiumApp Path中能定位到該文件就行。

模擬器中運行iOS應用

被測應用.app準備就緒後,接下來就能夠在iOS模擬器中運行了。

回到前面的那張圖。啓動Appium app後,對於模擬器運行的狀況,在iOS Settings中必須設置的參數項就3個,App PathForce DevicePlatform 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: ["Apple TV 1080p (9.2) [98638D25-7C82-48DF-BDCA-7F682F951533] (Simulator)","iPad 2 (9.2) [5E22F53E-EAB3-45DF-A1DD-10F58E920679] (Simulator)","iPad 2 (9.3) [4B2D2F9A-C099-4C13-8DE9-27C826A521C2] (Simulator)","iPad Air (9.2) [825E4997-9CD8-4225-9977-4C7AE2C98389] (Simulator)","iPad Air (9.3) [E4523799-E35F-4499-832B-12CF33F09144] (Simulator)","iPad Air 2 (9.2) [8057039D-F848-453E-97EC-2F75CAEA2E77] (Simulator)","iPad Air 2 (9.3) [0B8F49DA-832A-4248-BA1D-9DA5D11E31FD] (Simulator)","iPad Pro (9.2) [AF1F2D06-3067-41B5-AC2B-4B0ED88BF5D9] (Simulator)","iPad Pro (9.3) [C39617A6-9D91-4C0B-B25B-741BD57B016C] (Simulator)","iPad Retina (9.2) [D3C694E1-E3B4-47BE-AB5E-80B3D4E22FC2] (Simulator)","iPad Retina (9.3) [907C7B06-ED2C-48AC-AC46-04E4AD6E0CA3] (Simulator)","iPhone 4s (9.2) [1A786195-94E3-4908-8309-7B66D84E4619] (Simulator)","iPhone 4s (9.3) [3F76F34B-5A8F-4FD1-928D-56F84C192DDD] (Simulator)","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)","iPhone 6s (9.3) + Apple Watch - 38mm (2.2) [B63FFAA4-00A4-473B-9462-3664F41F9001] (Simulator)","iPhone 6s Plus (9.2) [58837F78-511A-4F0B-9DDF-782E3B9935BD] (Simulator)","iPhone 6s Plus (9.3) [C31003C6-DCE2-414D-AD7F-376F6FA995B0] (Simulator)","iPhone 6s Plus (9.3) + Apple Watch - 42mm (2.2) [E3154768-CA23-45CC-90E5-2D0386A57B7D] (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進行交互操做。


Read More ...

公衆號:DebugTalk
原文連接:http://debugtalk.com/post/build-app-automated-test-platform-from-0-to-1-Appium-interrogate-iOS-UI

相關文章

若是以爲個人文章對您有用,請隨意打賞。您的支持將鼓勵我繼續創做!
共收到 13 條回覆
605

不錯,把整個 iOS 安裝方面相關的知識串起來了。由於打包各類麻煩,咱們項目中通常最早實現自動化的就是打包。

PS:不通過 App store 的安裝方式我補充一下:

全部安裝到真機(非越獄)的應用(能夠是 .app ,也能夠是 .ipa ,只要編譯時選的是編譯成 Arm 的就好。.app 轉 .ipa 只須要一條命令) 都必須通過證書籤名。證書主要有三大種:

  1. 企業證書:$299/年,土豪專用(哈哈)。能夠裝到無限臺手機上,但不能提交 app store 。通常用於企業內部軟件。
  2. 收費我的開發者證書:$99/年。未提交 app store 前只能最多安裝到 100 臺設備上,而且該手機的 udid 號必須登記到此開發者證書上(在蘋果的開發者平臺上登記)。能夠提交到 app store。
  3. 免費我的開發者證書:從 XCode 7 開始推出,僅用於開發中的真機調試。可最多安裝到5臺設備上(這五臺設備必須經過鏈接開發者電腦的方式來登記到證書上),沒有提交到 app store 的權限。

同時證書籤名還有分 release 和 debug 的哦,只有 debug 擁有調試權限,能夠用於自動化測試。

至於安裝方式,主要有2大類:

  1. 從電腦安裝。Xcode,iTunes,ideviceinstaller,ios-deploy、PP助手等都屬於這種。底層調用的是同樣的協議,具體協議沒研究過。。。
  2. OTA 安裝,即從網絡安裝。大批量的安裝大多用這種。具體調用的是蘋果的 itms-service 協議。有興趣的同窗能夠看看這裏:https://m.oschina.net/blog/125501 。

其實還有一類,MDM,能夠主動推送安裝信息。實際安裝方式相似 OTA ,可是能得到手機的 udid (MDM權限很大的哦),能夠根據 udid 來推送合適的包。

相關文章
相關標籤/搜索