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

2021-02-15 DebugTalk

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

在本文中,我將在已準備就緒的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進行交互操作。


相關焦點

  • 移動APP自動化測試框架對比
    測試耗費時間,因為它總是默認先安裝app。需要Calabash框架安裝在ios的ipa文件中,因此測試人員必須要有iOS的app源碼。除了Ruby,對其他語言不友好。http://appium.io/Appium是一個開源的、跨平臺的自動化測試工具,支持IOS、Android和FirefoxOS平臺。
  • APP UI自動化測試思路總結
    接下來,一起總結一下APP UI自動化測試的思路吧。一,開發語言選擇通常用於自動化測試的程式語言有:Python、Java、Javascript、Ruby、C#、PHP等。一般我們會選擇自己熟悉的程式語言來編寫自動化腳本,但對於編程基礎基本為0的童鞋(或者專注於做自動化測試的童鞋),推薦學習使用Python。
  • Appium自動化測試環境搭建
    >」進行關注,微信公眾號TestMadman前言Appium是一個開源的自動化測試框架,支持跨平臺,支持多種程式語言,可用於原生,混合和移動web應用程式,使用webdriver驅動ios,android應用程式、那麼為了學習app自動化測試首要任務肯定就是搭建測試開發環境, 因此在這裡記一次搭建Appium自動化測試環境的完整過程
  • APP UI自動化測試,思路全總結在這裡了
    一般我們會選擇自己熟悉的程式語言來編寫自動化腳本,但對於編程基礎基本為0的童鞋(或者專注於做自動化測試的童鞋),推薦學習使用Python。相對於其他語言,Python做自動化測試有以下優點:選擇開發語言之後,我們需要選擇UI測試框架。目前較為主流或者使用較多的APP UI自動化測試框架有Appium、Airtest等。
  • 測試工程師必須要學會的APP UI 自動化都在這裡了!
    一般我們會選擇自己熟悉的程式語言來編寫自動化腳本,但對於編程基礎基本為0的童鞋(或者專注於做自動化測試的童鞋),推薦學習使用Python。相對於其他語言,Python做自動化測試有以下優點:選擇編開發語言之後,我們需要選擇UI測試框架。目前較為主流或者使用較多的APP UI自動化測試框架有Appium、Airtest等。
  • 一套完整的Appium自動化測試環境搭建過程
    Appium是一個開源的自動化測試框架,支持跨平臺,支持多種程式語言,可用於原生,混合和移動web應用程式,使用webdriver驅動ios,android應用程式、那麼為了學習app自動化測試首要任務肯定就是搭建測試開發環境, 因此在這裡記一次搭建Appium自動化測試環境的完整過程,文章較長,需要花費一定的時間,請耐心閱讀,如果文中有什麼錯誤請指正。
  • 記一次搭建Appium自動化測試環境的完整過程
    Appium是一個開源的自動化測試框架,支持跨平臺,支持多種程式語言,可用於原生,混合和移動web應用程式,使用webdriver驅動ios,android
  • 不只是移動 App 應用測試方法,還有測試思路……
    Native App 的測試,雖然不同的平臺會使用不同的自動化測試方案,iOS 一般採用XCUITest Driver,而 Android 一般採用 UiAutomator2 或者 Espresso 等,但是數據驅動、頁面對象以及業務流程封裝的思想依舊適用,完全可以把這些方法應用到測試用例設計中。
  • 全網最全最細的appium自動化測試環境搭建教程以及appium工作原理
    ,在掙扎中放棄,在放棄後又重新開始,只有10%的人,人品比較好,能夠很快並順利的搭建成功。appium 自動化測試是很早之前做的,一直想留下點什麼,可是一直抽不出一塊完整的時間來做這件事兒。現在終於有了。反觀各種網際網路的招聘,移動測試已經成了主流,如果再不去學習移動自動化測試技術將已經追不上時代的趕腳!好了,廢話不多說,進入正題!二、Appium簡介
  • 自動化測試實操案例詳解 | iOS應用篇
    因為之前很多同學都反饋說,官方教程裡面,絕大多數都是安卓設備的實操,Windows應用和iOS設備的測試實操很少,所以這兩周特意給大家安排上。不過在進入主題之前,我們需要明白,大部分情況下,在iOS上做自動化測試和在安卓設備上做自動化測試的思路是一致的,只有少部分接口會有所不同,比如 有些接口只支持安卓設備,不支持iOS設備 ;另外 有些接口在iOS設備和安卓設備的表現會略微不同 。這些內容我們在下文中都會給同學們詳細講解下。
  • 移動App測試中的最佳做法
    每項開發的新功能都需要進行測試。移動app測試中功能測試是一個重要方面,移動測試員應該要進行手動測試和自動化測試。剛開始測試時,測試員必須把 移動app  當做「黑盒」一樣進行手動測試,看看提供的功能是否正確並如設計的一樣正常運作。除了經典軟體測試,像點擊按鈕看看會發生什麼,測試員還必須執行更多功能 的行動裝置專門的測試。
  • 首款iOS手遊模擬器——黑雷蘋果桌面版
    在電腦上安裝手機模擬器,可以用來測試開發各種app,可以用來觀看影視節目,也可以用來玩手遊……除了打電話,其他手機上的操作差不多都可以通過電腦上安裝的手機模擬器來完成。由於安卓的開源,很早安卓模擬器在電腦上已經可以完美運行了,市面上有各式各樣的安卓模擬器,個人比較喜歡的是網易的mumu、逍遙、雷電三款。一直很期待能夠有一款ios模擬器,能夠模擬蘋果系統,解放自己蘋果手機可憐的電量。
  • 【推薦】移動App測試中的最佳做法
    而對於移動測試,測試員不得不基於用戶移動使用模式考慮移動相關的功能。  本文是基於我的工作經驗而寫的。作為一名敏捷軟體開發團隊的軟體質量保證經理,我一心投入iPhone, Android, Windows Phone 7的移動apps和移動web apps。在XING移動團隊的日常工作以及與其他移動測試專家交流的過程中,我深刻了解了移動測試工作的困難。
  • 小雞模擬器ios版官方下載
    最新小雞模擬器ios版官方下載就在18183遊戲庫,快來下載玩玩吧! 小雞模擬器ios版是專為蘋果用戶打造的模擬器遊戲下載平臺。模擬很多掌機和街機,簡直是神器。街機掌機最全、經典遊戲最多的遊戲模擬器!在這裡,你可以玩到萬款經典模擬器遊戲,如:恐龍快打、拳皇97等,趕快下載,回味經典吧!
  • 夜神安卓模擬器:安卓環境開發、測試三步搞定
    connect 127.0.0.1:62001通過adb我們可以在Eclipse中方便通過DDMS來調試安卓程序。當我們運行Eclipse等開發平臺時adb進程就會自動運行。adb可以直接操作管理安卓模擬器或者真實的安卓手機。
  • Appium 1.18.1 發布,移動應用自動化測試工具
    Appium 是一個開源、跨平臺的自動化測試工具,最初主要用於測試原生和輕量移動應用,包括 iOS 和 Android ,目前還支持對 Windows 平臺上的應用的自動化測試。
  • 使用pytest-xdist實現分布式APP自動化測試
    不知道大家有沒有遇到這樣一種情況,實際工作中,app自動化測試的用例可能是成百上千條的,如果放在一臺機器上跑,消耗的時間非常久,那能不能使用分布式的來跑測試用例呢?一般來說對於web自動化測試,使用多核CPU來做分布式比較合適,但對於app自動化測試來說,使用多臺機器做分布式比較合適。這裡主要介紹後者pytest-xdist是工作方式是一個master對應多個worker,每個worker會按照master的要求來執行各自的測試集。
  • Android常用6種自動化測試框架對比?
    隨著移動終端的普及,手機應用越來越多,也越來越重要。App的回歸測試用例數量也越來越多,全量回歸也越來越消耗時間。為了擺脫這些,需要引進一些自動化測試來協助我們。趁現在有空我來總結下,Android常用的幾種自動化測試框架的異同,使測試人員在選擇自動化框架時有所參考!
  • 沒有什麼是這個移動應用測試教程解決不了的!
    2.軟體或應用程式測試:在行動裝置上工作的應用程式及其功能已經過測試。 它被稱為「 移動應用測試 」,以區別於先前的方法。 即使在行動應用程式中,也有一些基本的差異對於理解非常重要:a)本機應用程式:本機應用程式是為在行動裝置和平板電腦等平臺上使用而創建的。
  • 10 個免費的移動 App 測試框架 (Android/iOS)
    對移動應用做 A/B 測試是非常難的,而 FlipTest 可以幫你簡化這個過程。 Appium 是一個開源、跨平臺的自動化測試工具,用於測試原生和輕量移動應用,支持 iOS, Android 和 FirefoxOS 平臺。