精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Appium +iOS自動化測試教程(實踐、總結 、踩坑)

Testin云測 ? 來源:Testin云測 ? 2024-11-11 09:42 ? 次閱讀

一、前言

項目閑置下來了,終于抽空有時間搞自動化了,看了下網上的教程基本通篇都是android自動化的介紹 ,ios自動化方面的內容網上簡介的少之可憐。由于本人對ios自動化也是第一次做,甚至對蘋果電腦的使用都不太熟悉,花了大概一周時間粗略的看下ios開發知識,網上隨手下載的來源于這兩本《iOS開發從入門到精通.pdf》、《iOS開發指南:從零基礎到App上架.pdf 》、至于Mac筆記本的學習完全是邊使用邊查詢操作 ;本文完全秉著指導小白操作的流程帶你一步一步搭建IOS自動化測試環境

二、iOS 自動化相關框架介紹

自動化測試類工具 隨著移動互聯網的興起,APP 測試的越來越被重視!Android 系統因為自己的開源性,測試工具和測試方法比較廣為流傳,但是 iOS 系統的私密性,導致很多測試的執行都有點麻煩。

為了幫助大家更好的執行 iOS APP 的測試,以下為大家收集了非常全面的 iOS 測試工具,涵蓋各大領域,希望各位能有所認識

三、自動化測試類工具

1. UIAutomation

UIAutomation 是蘋果提供的UI 自動化測試框架,使用 JavaScript 編寫。

基于 UIAutomation 有擴展型的工具框架和驅動型的框架。擴展型框架以 JavaScript 擴展庫方法提供了很多好用 js 工具,注入式的框架通常會提供一些 Lib 或者是 Framework,要求測試人員在待測應用的代碼工程中導入這些內容,框架可以通過他們完成對 app 的驅動。

驅動型 UI Automation 在自動化測試底層使用了 UI Automation 庫,通過 TCP 通信的方式驅動 UI Automation 來完成自動化測試,通過這種方式,編輯腳本的語言不再局限于 JavaScript。

這個工具在 iOS UI 自動化測試中使用非常廣泛。

具體參考資料:https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/UIAutomation.html

2.XCTest

XCTest 是蘋果在 iOS 7 和 Xcode5 引入的一個簡單而強大的測試框架,集成在 Xcode 中,用來編寫測試代碼。它提供了各個層次的測試。

XCTest 測試編寫起來非常簡單,并且遵循 xUnit 風格。

Xcode 在創建工程時,會默認使用 XCTest,并且默認創建了Unit Test(單元測試)和UI Test(界面測試)兩個 Target,其中 Unit Test 主要用于測試代碼的大部分基本功能,比如絕大多數 Model 的類和方法測試,業務邏輯測試,網絡接口調用測試等等。

UI Test 一般會考慮到用戶的交互流程,模擬用戶的交互操作,利用 XCTest 的 UI 記錄特性來獲取界面上的一些列視圖元素和操作事件,然后在測試方法中觸發事件。

所以這是一個可以提供各個層次的測試的框架,比如單元測試,自動化測試,性能測試等。

具體參考資料:

https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/01-introduction.html

3. KIF

KIF 是 Keep It Functional 項目的縮寫,是一款iOS app 功能性測試框架,來自 Square,該測試框架只支持 iOS。

所有測試使用 Objective-C 語言編寫,對測試人員來講,需要熟練的掌握 Objective-C 語言 , 對蘋果開發者來說非常容易上手,更是一款開發者廣為推薦的測試工具。

KIF 使用未公開的 Apple API(私有 API),這對于測試目的而言是安全的,基于第三方 iOS UI 的單元測試框架,所以可以做項目的單元測試,也可以做 UI 集成測試。但缺點是運行較慢。

具體參考資料:https://github.com/kif-framework/KIF

4. Frank

Frank 是 iOS 開發環境下一款實現自動測試的工具,Xcode 環境下開發完成后,通過 Frank 實現結構化的測試用例,其底層語言為 Ruby,作為一款開源的 iOS 測試工具,在國外已經有廣泛的應用。

但是國內相關資料卻比較少。其最大的優點是允許我們用熟悉的自然語言實現實際的操作邏輯。

它提供了針對 iOS 平臺的功能測試能力,可以模擬用戶的操作對應用程序進行黑盒測試,并且使用 Cucumber 編寫測試用例,使測試用例如同自然語言一樣描述功能需求,讓測試以“可執行的文檔”的形式成為業務客戶與交付團隊之間的橋梁。

優點:測試場景是在 Cucumber 的幫助下,用可理解的英語句子寫的,還有活躍的社區支持,以及不斷擴大中的庫。

缺點:對手勢的支持有限,所以在設備上運行測試有點難。

具體參考資料:https://www.testingwithfrank.com/

5. Calabash-iOS

Calabash 是一個適用于 iOS 和 Android 開發者的跨平臺 app 測試框架,可用來測試屏幕截圖、手勢和實際功能代碼。

Calabash 開源免費并支持 Cucumber 語言,Cucumber 能讓你用自然的英語語言表述 app 的行為,實現 BDD(Behavior Driven Development,行為驅動開發)。

而 Calabash-iOS 就是一個基于 Calabash 的 iOS 的功能、自動化測試框架。

優點:

有大型社區支持;

列表項簡單,類似英語表述的測試語句支持在屏幕上的所有動作,如滑動,縮放,旋轉,敲擊等。

缺點:

測試步驟失敗后,將跳過所有的后續步驟,這可能會導致錯過更嚴重的產品問題。

測試耗費時間,因為它總是默認先安裝 app,需要 Calabash 框架安裝在 iOS 的 ipa 文件中, 因此測試人員必須要有 iOS 的 app 源碼。

除了 Ruby,對其他語言不友好

具體資料獲取路徑:https://github.com/calabash/calabash-ios

6. Subliminal

Subliminal 是另一款與 XCTest 集成的框架,也是個不錯 iOS 集成測試框架。

與 KIF 不同的是,它基于 UIAutomation 編寫,對開發者隱藏 UIAutomation 中一些復雜的細節。可惜近幾年沒有更新了,若能支持 swift 就好了。

具體資料獲取路徑:https://github.com/Diaoul/subliminal

7. Kiwi

Kiwi 是對 XCTest 的一個完整替代,使用 xSpec 風格編寫測試。Kiwi 帶有自己的一套工具集,包括 expectations、mocks、stubs,甚至還支持異步測試。

它是一個適用于 iOS 開發的 Behavior Driven Development(BDD)庫,有著非常漂亮的語法。

優點在于其簡潔的接口和可用性,易于設置和使用,可以寫出結構性強易讀測試,非常適合新手開發者。

Kiwi 也是使用 Objective-C 語言編寫,易于 iOS 開發人員上手。

具體資料獲取路徑:https://github.com/kiwi-bdd/Kiwi8. Appium

Appium 是一個開源的、跨平臺的自動化測試工具,支持 iOS、Android 和 FirefoxOS 平臺。

通過 Appium,開發者無需重新編譯 app 或者做任何調整,就可以測試移動應用,可以使測試代碼訪問后端 API 和數據庫。

它是通過驅動蘋果的 UIAutomation 框架來實現的 iOS 平臺支持。

開發者可以使用 WebDriver 兼容的任何語言編寫測試腳本,如 Ruby,C#,Java, JS,OC, PHP,Python,Perl 和 Clojure 語言。

具體資料獲取路徑:http://appium.io/

內測發布工具

1. fir.im

為開發者提供測試應用極速發布,應用崩潰實時分析、用戶反饋收集等一系列開發測試效率工具服務,幫助開發者將更多精力放在產品的開發與應用的優化上。

2. 蒲公英

『蒲公英』是專為 iOS、Android 開發者提供的免費用應用內測、托管的平臺,旨在解決開發者將應用分發給內測用戶時的繁雜、低效的問題。

3. TestFlight

TestFlight 是蘋果提供的應用測試工具,允許開發者邀請用戶對應用的預發布版本進行測試,從而在應用正式發布至 App Store 前收集用戶反饋。

以上常用框架介紹完了,本篇幅主要以appium進行實踐講解

Appium驅動IOS測試原理

XCUITest是蘋果開發的一個做IOS自動化測試的框架,需要了解些Swift等iOS編程知識WebDriverAgent是Facebook開發的一個iOS自動化測試工具,先來看下面的這張原理圖:

2beae13e-904d-11ef-a511-92fbcf53809c.png

WDA在Client創建了一個Server,在手機端安裝了一個叫作WebDriverAgentRunner 的一個應用;這個應用會接收來自 Server 的指令,并連接底層的 XCTest.framwork,讓 XCTest.framwork 調用蘋果API來操作手機進行自動化

而appium是把WebDriverAgentRunner 給集成進去了,因此實現了appium的跨平臺能力

2bf888ca-904d-11ef-a511-92fbcf53809c.png

通過上圖我們了解到 Appium 很粗暴的把整個 WebDriverAgent 直接集成到自己的項目里,然后通信機制就走 WebDriverAgent,Appium 其實就提供了一個 Client 端的作用。所以 iOS 9.3 系統之后自動化測試核心是 WebDriverAgent,Appium 就提供了一個 Client 端來寫腳本和發送指令。

Appium 自動化架構模式可以用一個抽象的架構表示,就是下面這樣的:

2c130308-904d-11ef-a511-92fbcf53809c.png

從圖中可以看出:

Client 端是 Appium 之前本身提供的;

Server 端是:WebDriverAgent 和 Instruments;( Appium 直接把 WebDriverAgent 整個集成進來,Instruments 是為了支持 iOS 9.3 之前的系統)

最右邊是一個手機

之前 Server 是和 bootstrap.jar 通信,這里 WebDriverAgent 提供了 WebDriverAgentRunner (類似 bootstrap.jar 的功能),WebDriverAgent與之通信;

WebDriverAgentRunner 是一個應用,Client 和 server 運行了之后,WebDriverAgentRunner 會被裝到手機上,這個應用會接收來自 Server 的指令,并連接底層的 XCTest.framwork,并告訴 XCTest.framwork 操作手機進行自動化。

關于 WebDriverAgent

FaceBook 出品:

實現了一個 server,通過 server 可以遠程控制 iOS 設備:啟動應用、關閉應用、點擊、滾動等操作;

通過連接 XCTest.framework 調用蘋果的 API 執行動作;

支持多個設備同時進行自動化;

Appium、Macaca 已經集成。

但是 WebDriverAgent 僅僅只提供了一個 server(和 inspect 進行元素定位),并沒有像 Appium 一樣提供 java 或 python 的 Client 端去寫腳本,腳本執行的時候發送指令給 server,然后去運行。WebDriverAgent 要求你自己去實現 Client 端,即拿 Java/ Python 的 WebDriver 庫進行封裝,然后發送指令。所以 WebDriverAgent 其實就類似于 Appium server,就只是一個 server。

基礎環境搭建

基礎環境:一臺蘋果筆記本、一個iphone手機

基礎環境

MacBook Pro: 10.15.7

Macbook Pro(做 iOS 測試,Mac 是繞不開的,我們依賴的軟件環境需要運行在 Mac 上,必須要有一臺 Mac 本(很貴),得攢銀子咬牙買一臺 ~,我用的公司分配的測試本)。

iphone真機:iPhone 8 Plus 14.4

iPhone、iPad:既然測試 iOS 軟件,那 iPhone 和 iPad 也自然不用多說了,雖然 Xcode 里有虛擬機,但是實際測試還是以真機為準。本文也主要以真機為準

appium:1.20.2

appium原理

Appium是一個開源、跨平臺的測試框架,可以用來測試原生及混合的移動端應用。Appium支持IOS、Android及FirefoxOS平臺。Appium使用WebDriver的json wire協議,來驅動Apple系統的UIAutomation庫、Android系統的UIAutomator框架。Appium對IOS系統的支持得益于Dan Cuellar’s對于IOS自動化的研究。Appium也集成了Selendroid,來支持老android版本。

Appium支持Selenium WebDriver支持的所有語言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl語言,更可以使用Selenium WebDriver的Api。Appium支持任何一種測試框架。如果只使用Apple的UIAutomation,我們只能用javascript來編寫測試用例,而且只能用Instruction來運行測試用例。同樣,如果只使用Google的UIAutomation,我們就只能用java來編寫測試用例。Appium實現了真正的跨平臺自動化測試。

appium選擇了client-server的設計模式。只要client能夠發送http請求給server,那么的話client用什么語言來實現都是可以的,這就是appium及webdriver如何做到支持多語言的;

Appium優點

開源

跨架構:Native App、Hybird App、Web App

跨設備:Android、iOS、Firefox OS

不依賴源碼

使用任何 WebDriver 兼容的語言來編寫測試用例。比如 Java, Objective-C, JavaScript with Node.js (in both callback and yield-based flavours), PHP, Python, Ruby, C#, Clojure, 或者 Perl.

不需要重新編譯APP

支持IOS手機錄制視頻

Appium理念

你無需為了自動化,而重新編譯或者修改你的應用。

你不必局限于某種語言或者框架來寫和運行測試腳本。

一個移動自動化的框架不應該在接口上重復造輪子。(移動自動化的接口應該統一)

無論是精神上,還是名義上,都必須開源。

Appium 在 iOS 下工具的變革:

iOS 9 之前一直以 instruments 下的 UIAutomation為驅動底層技術(弊端由于 instruments 的限制,單臺 mac 只能對應單臺設備);

iOS 9.3 時代推出 XCUITest 工具,用以替代 UIAutomation;

iOS 10 時代蘋果直接廢棄了 UIAutomation、Facebook 推出 WebDriverAgent(實現的 server 能夠支持單臺 mac 對應多個設備);

Appium 在iOS 9.3 后全面采用 WebDriverAgent 的方案。

xcode: 12.4

MacBook appstore應用商店搜索下載即可

安裝內容

前提環境:

python , selenium , setuptools、pip

通用環境:

Homebrew ,Node & NPM ,Carthage ,Appium ,python-client ,Appium-Doctor , ios-deploy , ideviceinstaller & libimobiledevice , ios_webkit_debug_proxy , authroize-ios

IOS環境:

xCode , Command Line Tools

前提環境

python

此處使用python3 , 官網下載https://www.python.org/ 一步下一步安裝即可

selenium

終端輸入: pip install Selenium 安裝最新版本的selenium。pip install Selenium 如需安裝指定的版本,則pip install Selenium==版本號。

setuptools、pip

下載setuptools

https://pypi.python.org/pypi/setuptools 、https://pypi.python.org/pypi/pip

打開cmd 進入setuptools解壓目錄,輸入:python setup.py install

進入pip解壓目錄,輸入:python setup.py install

安裝好后,打開終端,輸入pip,如提示不是內部命令,則將python安裝目錄下Scripts目錄添加到環境變量Path中。

通用環境

Homebrew

Homebrew是一個包管理軟件,它可以使我們更容易地安裝其他一些軟件

/usr/bin/ruby-e"$(curl–fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)"

覆蓋安裝:

/usr/bin/ruby-e"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)"brew-v//檢查homebrew是否安裝 brewlist//查看已安裝列表 brewupdate//更新Homebrew

如果安裝失敗:

可以打開網址:http://vip.ytesting.com/q.do?a&id=ff80808172521d8201726a74986f0880 將其內容保存為homebrew.txt,

然后終端輸入:

/usr/bin/rubyhomebrew.txt

注意:此步驟還順帶安裝了Xcode命令行工具(xcode-commaindline-tools)。

檢查homebrew是否安裝

終端輸入安裝:

Node & NPM

Node是一個javascript運行時環境,npm是節點包管理器。我們需要這些,因為Appium是一個節點應用程序。

node-v重新安裝:brewreinstallnodenpmconfigsetregistryhttps://registry.npm.taobao.org/

默認的npm源再國內都很慢,安裝好node之后需要重新配置一個國內源 (非必須)

在終端中,輸入以下命令(此命令也將安裝npm):

brewinstallnode

查看node版本

Carthage

Carthage項目依賴管理, 類似于 java 的 maven;主要是 WebDriverAgent 使用,WebDriverAgent 是用它做項目依賴的

brewinstallcarthage

更新carthage : rew upgrade carthage

重新安裝 : brew reinstall carthage2. 安裝完成后檢查一下是否安裝成功

carthageversion//打印出版本號即表示安裝成功

終端輸入:

Appium

Appium是一個用于本地、混合和移動web應用程序的開源測試自動化框架。它使用WebDriver協議驅動iOS、Android和Windows mobile應用程序。

安裝 Appium(二選1) ;

兩者基本沒什么區別:非要說區別的話 ,方式1 安裝版本較穩定 方式2則版本最新

方式1:安裝桌面版 appium-server(推薦)桌面版包含了appium-server,同時也包含一個元素定位器,建議安裝桌面版。

方式2:安裝 appium-server 版

npminstall-gappium

默認安裝最新的版本,如果想安裝指定的版本:

npminstall-gappium@1.7.2

卸載 Appium:

npmuninstall-gappium npmcacheclean--forceappium-v

啟動appium服務

appium& [1]965$[Appium]WelcometoAppiumv1.9.1 [Appium]AppiumRESThttpinterfacelistenerstartedon0.0.0.0:4723

安裝完成之后輸入appium -v,顯示版本號表示appium server安裝成功

終端安裝server版輸入

python-client

下載python-client

gitclonegit@github.com:appium/python-client.git

安裝python-client

cdpython-client#進入python-client目錄 pythonsetup.pyinstall#安裝python-client

Appium-Doctor

2c26d6d0-904d-11ef-a511-92fbcf53809c.png

檢查appium安裝是否成功的工具集指令

npminstallappium-doctor-gappium-doctor--ios

備注:necessary dependcies 必須全部是對勾狀態 ,可選部分依賴可以不用全部安裝

檢查 iOS環境是否安裝成功

安裝 appium-doctor

ios-deploy

ios-deploy 一個不需要用Xcode安裝和調試應用的命令行工具。需要一個有效的開發者證書,需要 Xcode 7以上的版本。終端輸入命令進行安裝:

brewinstallios-deploy#安裝命令 brewreinstallios-deploy#重新安裝 brewupgradeios-deploy#更新命令

常用命令如下:

ios-deploy-c#查看當前鏈接的設備 ios-deploy--[xxx.app]#安裝APP ios-deploy--id[udid]--uninstall_only--bundle_id[bundleId]#卸載應用 ios-deploy--id[udid]--list_bundle_id#查看所有應用 ios-deploy--id[udid]--exists--bundle_id#查看應用是否安裝

ideviceinstaller & libimobiledevice

ios-deploy、ideviceinstaller 類似 android 的 adb;是 Appium 底層用到的工具之一,用于獲取 iOS 設備信息

brewinstallideviceinstaller#用于查看bundleid brewreinstallideviceinstaller#重新安裝brewinstalllibimobiledevice--HEAD#安裝最新的更新 brewreinstalllibimobiledevice#重新安裝

其常用命令如下:

idevice_id-l#顯示當前所連接設備的udid instruments-sdevices#列出所有設備,包括真機、模擬器、macideviceinstaller-u[udid]-i[xxx.ipa]#xxx.ipa為應用在本地的路徑ideviceinstaller-u[udid]-U[bundleId]ideviceinstaller-u[udid]-l#查看設備安裝的第三方應用 ideviceinstaller-u[udid]-l-olist_user#同上,查看設備安裝的第三方應用 ideviceinstaller-u[udid]-l-olist_system#查看設備安裝的系統應用 ideviceinstaller-u[udid]-l-olist_all#查看設備安裝的所有應用ideviceinfo-u[udid]#獲取設備信息 ideviceinfo-u[udid]-kDeviceName#獲取設備名稱同命令 idevicenameidevicename#同上 ideviceinfo-u[udid]-kProductVersion#獲取設備版本10.3.3 ideviceinfo-u[udid]-kProductType#獲取設備類型iPhone8,1 ideviceinfo-u[udid]-kProductName#獲取設備系統名稱idevicesyslog#屏幕上即可看見手機上所有的日志 idevicesyslog>>iphone.log&#重定向日志到文件中idevicecrashreport#參數可設置具體文件存放位置idevicescreenshot#獲取當前截屏,效率比appium截屏高10倍ideviceinfo#獲取設備所有信息 idevicesyslog#獲取設備日志 idevicecrashreport-etest#獲取設備 crashlog,test是文件夾需新建 idevicediagnostics#管理設備狀態-重啟、關機、睡眠等idevicediagnosticsrestart

重啟

其他系統文件信息

截屏

獲取手機端崩潰報告

查看手機實時日志

獲取設備信息

查看設備已安裝的應用

卸載應用

安裝應用

查看當前所連接的設備

ideviceinstaller 是一個與iOS設備的installation_proxy交互的工具,允許安裝、升級、卸載、存檔、還原和列舉已安裝或存檔的app。此工具用于在真機上運行測試,默認是都安裝的。

libimobiledevice 是一個跨平臺的軟件庫 ;不依賴任何已有的私有庫,不需要越獄。應用軟件可以通過這個開發包輕松訪問設備的文件系統、獲取設備信息,備份和恢復設備,管理 SpringBoard 圖標,管理已安裝應用,獲取通訊錄、日程、備注和書簽等信息

ios_webkit_debug_proxy

Appium使用ios_webkit_debug_proxy這個工具在真機上訪問web view。即混合應用的測試 ;在終端中,運行以下命令:

brewinstallios-webkit-debug-proxy#安裝命令 brewreinstallios-webkit-debug-proxy#重新安裝

附:

iOS WebKit Debug Proxy的原理是在本地起了一個代理做WebInspector到WebKit遠程調試的協議轉發。

authroize-ios

iOS 授權工具,主要用于模擬器中一些權限的授權;

npminstall-gauthroze-iossudoauthroze-ios sudoauthroze-ios

iOS 環境

Xcode

安裝Xcode和模擬器 :

啟動Mac應用程序商店并下載/安裝Xcode(Version 13.1)。安裝之后,啟動Xcode并選擇 Xcode > Preferences > Components 來安裝可能想要測試的模擬器。

安裝Command Line Tools

默認是不會安裝Command Line Tools的,Command Line Tools是在Xcode中的一款工具,可以在命令行中運行C程序。為了配置appium環境,我們需要安裝Xcode Command Line Tools。

官網下載

方法一:

xcode-select--install#查看是否安裝 xcode-select:error:commandlinetoolsarealreadyinstalled,use"SoftwareUpdate"to install updates(錯誤:命令行工具已經安裝,請使用“軟件更新”安裝更新)

方法二:

打開Xcode,創建一個新的項目,在OSX下面選擇Application,如果右側出現Command line tool圖 標,表示已經安裝成功。

方法三:

打開XCode 新建工程,如果安裝了,在新建窗口可以看到

xcodebuild-version

如果已經安裝過xcode,appium-doctor提示未安裝,則運行命令即可:

sudoxcode-select-r

附錄:

xcrunsimctllist|grep'(Booted)'#查看已啟動的模擬器udid instruments-sdevices#列出所有設備,包括真機、模擬器、mac #錄像功能 xrecord--quicktime--list xrecord--quicktime--name="iPhone"--out="/Users/yong/video/iphone.mp4"--force

安裝完成后,在終端中輸入以下命令來查看安裝版本:

下載完成后,雙擊已下載的 .dmg 進行安裝

檢驗 Command Line Tools 是否安裝成功

至此iOS環境搭建完畢!!!只適用于模擬器,真機的話還需要配置。

iOS 真機調試環境配置

前面我們知道WebDriverAgent是集成Appium測試ios應用的橋梁 (表現形式上:是安裝在ios設備上的一個應用),WebDriverAgent 先前是一個獨立的項目需要自己從github下載進行編譯執行 ,在后來appium已經強行將其綁定在其組件中也就是說當你安裝好appium時,WebDriverAgent也自動幫忙將其安裝好,只需要手動修改部分內容,重新編譯打包即可運行。

方式一:WebDriverAgent通過下載源碼進行安裝

不推薦通過此種方式安裝,該方式先前是為老版本ios 9.4 之前的版本沿用 ,且 github上的源碼已經距離現在兩年多沒有更新了,為避免不必要的問題。盡可能不要使用此種方式

安裝webdriverAgent

(1) 在github上下載最新webdriverAgent代碼

gitclonehttps://github.com/facebook/WebDriverAgent

(2)下載依賴

cd/Users/yourname/WebDriverAgent mkdir-pResources/WebDriverAgent.bundle sh./Scripts/bootstrap.sh

該腳本會使用Carthage下載所有的依賴,使用npm打包響應的js文件。執行完成后,直接雙擊打開WebDriverAgent.xcodeproj這個文件。

配置webdriverAgent

配置WebDriverAgentLib,選擇開發者賬號

2c4382bc-904d-11ef-a511-92fbcf53809c.png

配置WebDriverAgentRunner,選擇開發者賬號

2c5ef9f2-904d-11ef-a511-92fbcf53809c.png

連接并選擇自己的ios設備,運行

2c729ae8-904d-11ef-a511-92fbcf53809c.png

2c91b068-904d-11ef-a511-92fbcf53809c.png

2cae473c-904d-11ef-a511-92fbcf53809c.png

運行成功后,iphone手機上會新建一個無圖標的WebDriverAgent的應用,自動打開后馬上又返回桌面

2cdbf7ea-904d-11ef-a511-92fbcf53809c.png

而在xcode控制臺會打印如下日志:

2cf3bbfa-904d-11ef-a511-92fbcf53809c.png

里面有IP地址與端口


在網址上輸入http://(ip地址):(端口號)/status,如果網頁上返回一些json格式的數據,說明運行成功http://10.0.223.58:8100/status,有些iphone手機通過手機的IP和端口號還不能訪問,此時需要將手機的端口轉發到mac上

iproxy 8100 8100 # iproxy 8300 8100

執行命令后,通過訪問 http://localhost:8100/ status來驗證, 如果網頁上返回一些json格式的數據,說明運行成功

2d229678-904d-11ef-a511-92fbcf53809c.png

而如果是想查看UI的圖層,則可訪問http://localhost:8100/inspector,方便書寫測試用例

2d580eac-904d-11ef-a511-92fbcf53809c.png

備注:

通常來說為了持續集成,自動化會比較好一些,我們不必每次都通過這種方式來啟動xcode、WebDriverAgent,這種方式只在第1次搭建環境時運行即可,我們可以在自動化腳本中加入如下代碼,這樣只要在以后啟動appium后,運行自動化腳本,就會直接啟動WebDriverAgent

desiredCapabilities.setCapability("useNewWDA", true);

如果xcode在先啟動wda,而代碼中又用此行代碼,運行時xcode中會顯示執行失敗,報出沖突的錯誤哦,所以后期只在代碼中啟動WebDriverAgent即可,不再需要用xcode啟動

精簡過程如下:

2d7f5fb6-904d-11ef-a511-92fbcf53809c.png

方式二:WebDriverAgent通過集成appium進行安裝

命令行安裝:命令行安裝的appium一般安裝在/usr/local/bin/appium下,

WebDriverAgent將會在路徑:/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/ 下

桌面版安裝:WebDriverAgent的路徑是:ls /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent

以上兩種方式都可以在對應目錄看到 WebDriverAgent.xcodeproj 工程,右鍵選擇用xcode打開 ;在 “Signing&Capabilities” 下將 WebDriverAgentLib 和 WebDriverAgentRunner設置成 “Automatically manage signing” 并在 “Team” 中選擇你的開發團隊

2da07278-904d-11ef-a511-92fbcf53809c.png

新用戶第一次需要創建Team團隊

2dbeb4b8-904d-11ef-a511-92fbcf53809c.png

2de4a498-904d-11ef-a511-92fbcf53809c.png

2e079d18-904d-11ef-a511-92fbcf53809c.png

2e1a97b0-904d-11ef-a511-92fbcf53809c.png

2e2e7f0a-904d-11ef-a511-92fbcf53809c.png

剩下操作步驟和方式一種第3步一樣, 不在此列出 ;

IOS自動化-WebDriverAgent-APPIUM框架原理

WebDriverAgent是Facebook開發的基于XCTest.framework的開源項目,實現了在iOS上支持WebDriver協議的服務,可以用來啟動/終止APP,點擊/滑動頁面。

webdriver協議是一套基于HTTP協議的JSON格式規范,協議規定了不同操作對應的格式。之所以需要這層協議,是因為iOS、Android、瀏覽器等都有自己的UI交互方式,通過這層”驅動層“屏蔽各平臺的差異,就可以通過相同的方式進行自動化的UI操作,做網絡爬蟲常用的selenium是瀏覽器上實現webdriver的驅動,而WebDriverAgent則是iOS上實現webdriver的驅動。

Appium客戶端

在iOS上的客戶端實際上就是使用了WebDriverAgent,作為實現webdriver協議的驅動層。

Appium服務端

Appium的服務端是一個桌面應用,用于和客戶端通信,啟動Appium的服務端之后,會在電腦上啟動一個默認端口號是4723的HTTP服務。當我們編寫完腳本執行時,腳本代碼會被轉換為webdriver協議的JSON數據,通過HTTP請求發送到電腦的4723端口。Appium服務端將腳本的執行請求下發給客戶端(請求客戶端的6100端口),客戶端同樣使用webdriver協議響應

利用Appium-Python-Client進行iOS的自動化測試

配置 appium 工具

運行 Appium-Desktop

2e5b2230-904d-11ef-a511-92fbcf53809c.png

開啟start server

2e67adb6-904d-11ef-a511-92fbcf53809c.png

點擊start new session并且在Desired Capabilities 中輸入相關的參數后點擊Start Session

2e8287f8-904d-11ef-a511-92fbcf53809c.png

運行成功后,會彈出一個控制界面,在該界面中可以控制手機上正在運行的程序

2e92c046-904d-11ef-a511-92fbcf53809c.png

開始自動化測試

打開下載后的appiumSimpleDemo文件,打開appiumSimpleDemo.xcodepro程序,配置下TARGET的簽名

在appiumSimpleDemo的根目錄執行編譯指令,編譯出一個app文件xcodebuild -sdk iphoneos -target appiumSimpleDemo -configuration Release,編譯成功后app文件的地址會打印在命令行中 ;此處直接使用 xcode進行編譯也可以 ,怎么方便怎么來

2eaa3852-904d-11ef-a511-92fbcf53809c.png

執行appiumSimpleDemo.py 文件路徑如下:/Users/jx/PycharmProjects/53ui_ios/venv/bin/python /Users/jx/appiumSimpleDemo/appiumSimpleDemo.py

2ebfb3d0-904d-11ef-a511-92fbcf53809c.png

源碼如下:

importunittest importos fromappiumimportwebdriver fromtimeimportsleep classappiumSimpleTezt(unittest.TestCase): defsetUp(self): app_path='/Users/jx/appiumSimpleDemo/build/Release-iphoneos/appiumSimpleDemo.app' app=os.path.abspath(app_path) self.driver=webdriver.Remote( command_executor='http://127.0.0.1:4723/wd/hub', desired_capabilities={ 'app':app, 'platformName':'iOS', 'platformVersion':'14.4', 'deviceName':'iPhone8plus', 'bundleId':'com.yongapps.app', 'udid':'4c7a46cee7f512ff1463eb3b09dc5329e779355c' } ) deftest_push_view(self): next_view_button=self.driver.find_element_by_accessibility_id("entrynextview") next_view_button.click() sleep(2) back_view_button=self.driver.find_element_by_accessibility_id("Back") back_view_button.click() deftearDown(self): sleep(1) #self.driver.quit() if__name__=='__main__': suite=unittest.TestLoader().loadTestsFromTestCase(appiumSimpleTezt) unittest.TextTestRunner(verbosity=2).run(suite)

踩坑筆記

問題1:如果安裝 carthage出現以下錯誤:

Error:Anunexpectederroroccurredduringthebrewlinkstep Theformulabuilt,butisnotsymlinkedinto/usr/local Permissiondenied@dir_s_mkdir-/usr/local/Frameworks Error:Permissiondenied@dir_s_mkdir-/usr/local/Frameworks

原因是carthage已經安裝,但是沒有 link 到 brew,還有就是文件夾權限問題,在終端輸入:

MacBook-pro~%sudomkdir/usr/local/Frameworks MacBook-pro~%sudochown$(whoami):admin/usr/local/Frameworks MacBook-pro~%brrewlinkcarthage

問題2:安裝 libimobiledevice & ideviceinstaller 遇到:“invalid active developer path”

運行:

MacBook-pro~%xcode-select--install MacBook-pro~%sudoxcode-select-r

可能出現的問題

dyld:Librarynotloaded:/usr/local/opt/openssl/lib/libssl.1.0.0.dylibReferencedfrom: /usr/local/opt/libimobiledevice/lib/libimobiledevice.6.dylibReason:imagenotfound

如果遇到如上錯誤,則先卸載ideviceinstaller 和 libimobiledevice

MacBook-pro~%brewuninstallideviceinstaller MacBook-pro~%brewuninstalllibimobiledevice

然后再重安裝即可

問題3:ios-webkit-debug-proxy 安裝遇到 The following directories are not writable by your user:

詳細錯誤提示:

Thefollowingdirectoriesarenotwritablebyyouruser: /usr/local/share/man/man5 /usr/local/share/man/man7

解決方法:因為是該目錄無權限無法寫入的問題,所以直接sudo給上權限就可以了,然后再使用安裝命令就可以了,示例如下圖:

2eea37c2-904d-11ef-a511-92fbcf53809c.png

問題4:xcode-select --install命令行安裝提示 Xcode alone is not sufficient on Sierra.

Error:XcodealoneisnotsufficientonSierra. InstalltheCommandLineTools: xcode-select--install

解決方案:Mac最新場景下安裝Xcode時已經沒有Command Line了,需要單獨安裝。根據提示在使用命令xcode-select --install` 安裝時最后結果是不能安裝該軟件。需要安裝如上所示

問題5:方式一 安裝WebDriverAgent 執行 ./Scripts/bootsrap.sh 出錯如下

2f230854-904d-11ef-a511-92fbcf53809c.png

安裝最后我們可以看到部分依賴安裝需要安裝 Carthage 這個東西,如果沒注意的話就會造成 RoutingHTTPServer 部分文件缺失,后面 build 就會報錯 。

2f421208-904d-11ef-a511-92fbcf53809c.png

2f5d339e-904d-11ef-a511-92fbcf53809c.png

通過命令 brew install carthage 安裝后再執行 ./Scripts/bootstrap.sh 即可。

根據 WebDriverAgent 官網提供的步驟,將參數替換為我們真機的參數后在真機上嘗試build 。

2f7134f2-904d-11ef-a511-92fbcf53809c.png

執行完命令后可能會出現如下報錯

2f894ccc-904d-11ef-a511-92fbcf53809c.png

從報錯信息來看,缺少 development team,那么我們回到 Xcode,將 Automatically manage signing 進行勾選后選擇一個 Team,注意要進入 WebDriverAgentRunner 中進行設置 。設置好之后又會出現報錯

這個報錯信息就和我們之前提到的一樣,bundle indentifler 不唯一,保險起見,這里將項目中所有的 Targets 都進行了修改

修改好之后我們再次 build,之前的問題解決了,不幸的是 build 又 fail 了,又出現了新的報錯:

2fb57e14-904d-11ef-a511-92fbcf53809c.png

解決辦法:

沒錯,我們在報錯出雙擊,進入到報錯代碼處,將 assign 改為 strong 后再次 build :

2fc7fc06-904d-11ef-a511-92fbcf53809c.png

Build succeeded !!!老淚縱橫…

最終,再執行

最后踩坑:build成功后,ios真機上沒有安裝WDA這個問題困擾了我一個星期,然后最后我把ios設備名改成英文后安裝成功了。。。

終于在 iOS 真機上看到了 WDA 的身影

2fe65b56-904d-11ef-a511-92fbcf53809c.png

問題6:執行 ./Scripts/bootstrap.sh ERROR in ./js/app.js 報錯 出錯如下

3002cd54-904d-11ef-a511-92fbcf53809c.png

301f227e-904d-11ef-a511-92fbcf53809c.png

303d23fa-904d-11ef-a511-92fbcf53809c.png

問題7: 執行時候報 xcodebuild failed with code 65 錯誤

30554368-904d-11ef-a511-92fbcf53809c.png

307d621c-904d-11ef-a511-92fbcf53809c.png

問題8: 個人證書調試失敗

Failed to register bundle identifier.The app identifier "com.facebook.WebDriverAgentRunner" cannot be registered to your development team because it is not available. Change your bundle identifier to a unique string to try again.

需要手動更改目標的bundle id,方法是進入“Build Settings”選項,更改“Product bundle Identifier”的值使Xcode將接受,默認為com.facebook.WebDriverAgentRunner,你需要改成不一樣的,如:io.automation.WebDriverAgentRunner (此處必須修改為和你在蘋果開發者后臺申請的bundle Id 一樣 )

309eded8-904d-11ef-a511-92fbcf53809c.png

返回 “Signing&Capabilities” 選項,看到對于文件WebDriverAgentRunner的配置文件已經創建成功了

30d483bc-904d-11ef-a511-92fbcf53809c.png

310a51ae-904d-11ef-a511-92fbcf53809c.png

問題9: 解決警告問題

解決方案如下:

312f8a00-904d-11ef-a511-92fbcf53809c.png

問題10: 將WDA安裝到被測手機上,安裝失敗 ,提示如下

報錯: error:Noprofilesfor'io.uitest.WebDriverAgentRunner.xctrunner'werefound:Xcodecouldn'tfindanyiOSAppDevelopmentprovisioningprofilesmatching'io.uitest.WebDriverAgentRunner.xctrunner'.Automaticsigningisdisabledandunabletogenerateaprofile.Toenableautomaticsigning,pass-allowProvisioningUpdatestoxcodebuild.(intarget'WebDriverAgentRunner'fromproject'WebDriverAgent')

報這個錯是因為沒有接入相關的設備到MAC上,只要設備接入,并通過XCode菜單:Product->Destnation->"Select Devices"選中要連接的設備就行。

解決方案:

XCode:Product->Destination->"Select your iphone"

314ce262-904d-11ef-a511-92fbcf53809c.png

Product->Scheme->"Select WebDriverAgentRunner"

31711290-904d-11ef-a511-92fbcf53809c.png

Product -> Test

31983b36-904d-11ef-a511-92fbcf53809c.png

注意:運行Test之前,手機先解鎖再通過USB線連接到電腦。

問題10: 解決Product -> Test報錯問題,如下所示

31bfe140-904d-11ef-a511-92fbcf53809c.png

/usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgent.xcodeprojUser-suppliedCFBundleIdentifiervalue'com.facebook.wda.lib'intheInfo.plistmustbethesameasthePRODUCT_BUNDLE_IDENTIFIERbuildsettingvalue'com.facebook.WebDriverAgentLib'.

解決方案:

31deaee0-904d-11ef-a511-92fbcf53809c.png

運行報錯:

/usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RoutingHTTPServer.h9:'CocoaAsyncSocket/GCDAsyncSocket.h'filenotfound

解決:進入appium-webdriveragent目錄,重新執行:

MacBook-pro%cd/usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent MacBook-proappium-webdriveragent%sh./Scripts/bootstrap.sh

31f288ac-904d-11ef-a511-92fbcf53809c.png

再次執行Product -> Test,彈出密鑰授權彈窗,輸入密鑰(多次輸入密鑰,直到彈窗消失)

最后報錯:Command CodeSign failed with a nonzero exit code解決方案---通過終端命令:

MacBook-proappium-webdriveragent%xcodebuild-projectWebDriverAgent.xcodeproj-schemeWebDriverAgentRunner-destination'id=000-000080E'test

執行中會彈出密鑰彈窗,多次輸入密鑰,直到彈窗消失

最后機上可以看到一個沒有圖標的 WebDriverAgentRunner.app 應用,進入設置 -》通用 -》設備管理 -》點擊 開發者app下面的證書 -》點擊“第一個藍色字體信任按鈕” -》點擊信任,再重新執行項目即可正常連接xcode點擊直接運行:

32166664-904d-11ef-a511-92fbcf53809c.png

再次報錯:

/usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgent.xcodeprojUser-suppliedCFBundleIdentifiervalue'com.facebook.wda.runner'intheInfo.plistmustbethesameasthePRODUCT_BUNDLE_IDENTIFIERbuildsettingvalue'io.uitest.WebDriverAgentRunner'.

解決方案:

32393d42-904d-11ef-a511-92fbcf53809c.png

最終看到這樣輸出就是成功了:

TestSuite‘Alltests’startedat2017-01-231512.585 TestSuite‘WebDriverAgentRunner.xctest’startedat2017-01-231512.586 TestSuite‘UITestingUITests’startedat2017-01-231512.587 TestCase‘-[UITestingUITeststestRunner]’started. t=0.00sStartTestat2017-01-231512.588 t=0.00sSetUp

備注:

xxx.app為 Xcode 編譯后的應用安裝包路徑

xxx.ipa為應用在本地的路徑

問題11: wda安裝成功了,但是 驗證時訪問無結果

解決方案:

有些國產的iPhone機器通過手機的IP和端口還不能訪問,此時需要將手機的端口轉發到Mac上。

使用--HEAD安裝最新版本

$brewinstalllibimobiledevice--HEAD$iproxy81008100

這時通過訪問http://localhost:8100/status確認WDA是否運行成功。

此時你應該可以看到有返回信息,只不過返回的sessionID 為空 ,此處如果有問題見問題12

問題12: Appium 重簽名后的 wda 正常啟動了,但是沒有返回 sessionID

wda 的日志如下:

TestSuite'WebDriverAgentRunner.xctest'startedat2020-06-121528.188 TestSuite'UITestingUITests'startedat2020-06-121528.188 2020-06-121528.215329+0800WebDriverAgentRunner-Runner[616:123635][UserDefaults]Couldn'twritevaluesforkeys( KeyboardAutocorrection )inCFPrefsPlistSource<0x282b9ed00>(Domain:com.apple.Preferences,User:kCFPreferencesCurrentUser,ByHost:No,Container:(null),ContentsNeedRefresh:No):settingpreferencesoutsideanapplication'scontainerrequiresuser-preference-writeorfile-write-datasandboxaccess 2020-06-121528.221426+0800WebDriverAgentRunner-Runner[616:123635][UserDefaults]Couldn'twritevaluesforkeys( KeyboardPrediction )inCFPrefsPlistSource<0x282b9ed00>(Domain:com.apple.Preferences,User:kCFPreferencesCurrentUser,ByHost:No,Container:(null),ContentsNeedRefresh:No):settingpreferencesoutsideanapplication'scontainerrequiresuser-preference-writeorfile-write-datasandboxaccess 2020-06-121528.222215+0800WebDriverAgentRunner-Runner[616:123635][UserDefaults]Couldn'twritevaluesforkeys( KeyboardShowPredictionBar )inCFPrefsPlistSource<0x282b9ed00>(Domain:com.apple.Preferences,User:kCFPreferencesCurrentUser,ByHost:No,Container:(null),ContentsNeedRefresh:No):settingpreferencesoutsideanapplication'scontainerrequiresuser-preference-writeorfile-write-datasandboxaccess 2020-06-121528.224043+0800WebDriverAgentRunner-Runner[616:123635][UserDefaults]Couldn'twritevaluesforkeys( DidShowGestureKeyboardIntroduction )inCFPrefsPlistSource<0x282b9ed00>(Domain:com.apple.Preferences,User:kCFPreferencesCurrentUser,ByHost:No,Container:(null),ContentsNeedRefresh:No):settingpreferencesoutsideanapplication'scontainerrequiresuser-preference-writeorfile-write-datasandboxaccess TestCase'-[UITestingUITeststestRunner]'started. t=0.00sStartTestat2020-06-121528.224 t=0.00sSetUp 2020-06-121528.230656+0800WebDriverAgentRunner-Runner[616:123635]BuiltatJun1220201529 2020-06-121528.238785+0800WebDriverAgentRunner-Runner[616:123635]ServerURLHere->http://172.18.62.8:8100<-ServerURLHere 2020-06-12?1528.239467+0800?WebDriverAgentRunner-Runner[616:123836]?Using?singleton?test?manager

使用 postman 發送請求,返回的 sessionID 為 null,但是 xcode 的控制臺沒有報任何錯誤

325a061c-904d-11ef-a511-92fbcf53809c.png

啟動應用程序直接返回 400

3273ce9e-904d-11ef-a511-92fbcf53809c.png

此問題坑爹至極 ,網上搜索了眾多內容都沒有此問題的答案 ;但是有人在testhome上已經提出了這個問題但是至今沒有人回復答案 ;

解決方案:

安裝usbmuxd

brewinstallusbmuxd

iproxy該工具會將設備上的端口號映射到電腦上的某一個端口

32954c68-904d-11ef-a511-92fbcf53809c.png

最后使用iproxy 進行端口轉發的時候, 一定跟上指定的設備id

即: iproxy local_port device_port -u udid

問題13:解決 XCUITest iproxy exited with code 208

命令行執行

ps-ax|grep-**i**"iproxy"|grep-vgrep|awk'{print"kill-9"$1}'|sh

問題14:每次測試應用都需要啟動 WebDriverAgent , 修改使用腳本方式自動運行

#解鎖keychain,以便可以正常的簽名應用, PASSWORD="YourPassword" securityunlock-keychain-p$PASSWORD~/Library/Keychains/login.keychain #獲取設備的UDID,用到了之前的libimobiledevice UDID=$(idevice_id-l|head-n1) #真機運行測試 xcodebuild-projectWebDriverAgent.xcodeproj-schemeWebDriverAgentRunner-destination"id=$UDID"test #模擬器運行測試 #xcodebuild-projectWebDriverAgent.xcodeproj-schemeWebDriverAgentRunner-destination"platform=iOSSimulator,name=iPhoneX"test

腳本運行完成后,同樣手機/模擬器上會出現一個無圖標的 WebDriverAgent 應用,啟動之后,馬上又返回到桌面。此時終端會輸出 IP 地址和端口。

附錄

1. 關于Certificate、Provisioning Profile、App ID的介紹及其之間的關系

考慮到想要將待測試應用安裝到真機 ,首先繞不過去的必須得申請證書,申請證書之前又必須得要開發者賬號,以上都具備了開始按步驟申請Certificate、Provisioning Profile、App ID ;可是即使你申請成功,難免對以上三者之間關系感到懵逼,以下對三者之間關系進行簡介說明,幫助理清之間的脈絡關系

開發者賬號類型

32b1e080-904d-11ef-a511-92fbcf53809c.png

概念介紹

如果你擁有一個開發者賬戶的話,在iOS Dev Center打開Certificates, Indentifiers & Profiles,你就可以看到如下的列表:

32d705e0-904d-11ef-a511-92fbcf53809c.png

Profile Portal改版有一段時間了,改版之后的結構比以前更清晰明了,易于理解和管理。

上面的列表就包含了開發、調試和發布iOS應用程序所需的所有內容:Certificates、Identifiers、Devices、Provisioning Profiles。下面將一一解釋這幾個東東。

Certificate

證書是用來給應用程序簽名的,只有經過簽名的應用程序才能保證他的來源是可信任的,并且代碼是完整的, 未經修改的。在Xcode Build Setting的Code Signing Identity中,你可以設置用于為代碼簽名的證書。

眾所周知,我們申請一個Certificate之前,需要先申請一個Certificate Signing Request (CSR) 文件,而這個過程中實際上是生成了一對公鑰和私鑰,保存在你Mac的Keychain中。代碼簽名正是使用這種基于非對稱秘鑰的加密方式,用私鑰進行簽名,用公鑰進行驗證。如下圖所示,在你Mac的keychain的login中存儲著相關的公鑰和私鑰,而證書中包含了公鑰。你只能用私鑰來進行簽名,所以如果沒有了私鑰,就意味著你不能進行簽名了,所以就無法使用這個證書了,此時你只能revoke之前的證書再申請一個。因此在申請完證書時,最好導出并保存好你的私鑰。當你想與其他人或其他設備共享證書時,把私鑰傳給它就可以了。私鑰保存在你的Mac中,而蘋果生成的Certificate中包含了公鑰。當你用自己的私鑰對代碼簽名后,蘋果就可以用證書中的公鑰來進行驗證,確保是你對代碼進行了簽名,而不是別人冒充你,同時也確保代碼的完整性等。

3302ccca-904d-11ef-a511-92fbcf53809c.png

證書主要分為兩類:Development和Production,Development證書用來開發和調試應用程序,Production主要用來分發應用程序(根據證書種類有不同作用),下面是證書的分類信息:(括號內為證書有效期)

(注:不同類型的開發者賬戶所能創建的證書種類不同,關于開發者賬戶的對比和InHouse證書相關的內容,請見我的另一篇文章)

有一些類型的證書我沒有使用過,所以也不了解具體的作用。

App ID

App ID用于標識一個或者一組App,App ID應該是和Xcode中的Bundle ID是一致的或者匹配的。App ID主要有以下兩種:

每創建一個App ID,我們都可以設置該App ID所使用的APP Services,也就是其所使用的額外服務。每種額外服務都有著不同的要求,例如,如果要使用Apple Push Notification Services,則必須是一個explicit App ID,以便能唯一標識一個應用程序。下面是目前所有可選的服務和相應的配置要求。

33185dc4-904d-11ef-a511-92fbcf53809c.png

如果你的App使用上述的任何一種service,就要按照要求去配置。

Device

Device最簡單了,就是iOS設備。Devices中包含了該賬戶中所有可用于開發和測試的設備。每臺設備使用UDID來唯一標識。

每個賬戶中的設備數量限制是100個。Disable 一臺設備也不會增加名額,只能在membership year 開始的時候才能通過刪除設備來增加名額。

Provisioning Profile

一個Provisioning Profile文件包含了上述的所有內容:證書、App ID、設備。

試想一下,如果我們要打包或者在真機上運行一個應用程序,我們首先需要證書來進行簽名,用來標識這個應用程序是合法的、安全的、完整的等等;然后需要指明它的App ID,并且驗證Bundle ID是否與其一致;再次,如果是真機調試,需要確認這臺設備能否用來運行程序。而Provisioning Profile就把這些信息全部打包在一起,方便我們在調試和發布程序打包時使用,這樣我們只要在不同的情況下選擇不同的profile文件就可以了。而且這個Provisioning Profile文件會在打包時嵌入.ipa的包里。

例如,如下圖所示,一個用于Development的Provisioning Profile中包含了該Provisioning Profile對應的App ID,可使用的證書和設備。這意味著使用這個Provisioning Profile打包程序必須擁有相應的證書,并且是將App ID對應的程序運行到Devices中包含的設備上去。

Explicit App ID:唯一的App ID,這種App ID用于唯一標識一個應用程序,例如com.ABC.demo1,標識Bundle ID為com.ABC.demo1的程序。

Wildcard App ID:通配符App ID,用于標識一組應用程序。例如*可以表示所有應用程序,而com.ABC.*可以表示以com.ABC開頭的所有應用程序。

In-House and Ad Hoc (3年):用來發布In-House和AdHoc的應用程序。

MDM CSR

Push Production (1年):用來在發布版本中使用Apple Push Notification。

Pass Type ID Certificate

Website Push ID Certificate

App Development (1年):用來開發和真機調試應用程序。

Push Development (1年):用來調試Apple Push Notification

Development

Production

App Store :用來發布提交App Store的應用程序。

33383702-904d-11ef-a511-92fbcf53809c.png

如上所述,在一臺設備上運行應用程序的過程如下:

334f1468-904d-11ef-a511-92fbcf53809c.png

與證書一樣,Provisioning Profile也分為Development和Distribution兩種:

(注:前面提到不同賬戶類型所能創建的證書種類不同,顯然Profile文件的種類是和你所能創建的證書種類相關的)

Development (1年)

Distribution (1年)

In House

Ad Hoc

App Store

In House 與Ad Hoc的不同之處在于:In House沒有設備數量限制,而Ad Hoc是用來測試用的,Ad Hoc的包只能運行在該賬戶內已登記的可用設備上,顯然是有最多100個設備的數量限制。所以這兩種Provisioning Profile文件的區別就在于其中的設備限制不一樣而已,而他們所使用的Certificate是相同的。

開發/發布流程

了解了上面的概念,再來看開發及發布流程就非常簡單了,而且相信你不用看教程也能一步步完成所有的操作了。

開發/真機調試流程

根據上面的介紹,可以知道進行Development主要有以下幾個步驟:

申請證書

加入設備

生成Provisioning Profile

設置Xcode Code Sign Identifer

事實上第三步通常是不需要的,因為我們通常都是用Xcode生成和管理的iOS Team Provisioning Profile來進行開發,因為它非常方便,所以不需要自己手動生成Provisioning Profile。

iOS Team Provisioning Profile是第一次使用Xcode添加設備時,Xcode自動生成的,它包含了Xcode生成的一個Wildcard App ID(*,匹配所有應用程序),賬戶里面所有的Devices和所有Development Certificates,如下圖所示。因此,team中的所有成員都可以使用這個iOS Team Provisioning Profile在team中的所有設備上調試所有的應用程序。并且當有新設備添加進來時,Xcode會更新這個文件。

336c710c-904d-11ef-a511-92fbcf53809c.png

發布流程

網上有很多關于發布App Store的流程,我就不綴述了,不過根據上面的概念介紹,不管是App Store、In-House還是Ad-Hoc,打包流程都是差不多的,都包括了以下幾個關鍵步驟:

創建發布證書

創建App ID

創建對應的Provisioning Profile文件

設備Bundle ID和App ID一致

設置Xcode Code Sign Identifer,選擇合適的Profile和證書進行簽名,打包

2. WebDriverAgent 整體框架設計

3382f2f6-904d-11ef-a511-92fbcf53809c.png

GitHub的描述:

WebDriverAgentisaWebDriverserverimplementationforiOSthatcanbeusedtoremotecontroliOSdevices.Itallowsyoutolaunch&killapplications,tap&scrollviewsorconfirmviewpresenceonascreen.Thismakesitaperfecttoolforapplicationend-to-endtestingorgeneralpurposedeviceautomation.ItworksbylinkingXCTest.frameworkandcallingApple'sAPItoexecutecommandsdirectlyonadevice.WebDriverAgentisdevelopedandusedatFacebookforend-to-endtestingandissuccessfullyadoptedbyAppium.

WebDriverAgent在iOS端實現了一個WebDriverServer,可用于遠程控制iOS設備。它允許您啟動和終止應用程序,點擊和滾動視圖或確認屏幕上的視圖狀態。這使其成為應用端到端測試或通用設備自動化的完美工具。它通過鏈接XCTest.framework和調用Apple的API來直接在設備上執行命令。WebDriverAgent在Facebook上開發并用于端到端測試,并被Appium成功采用。特性:

適用于設備和模擬器

實現大部分WebDriver規范

實現Mobile JSON Wire Protocol Spec的一部分

USB支持設備

具有友好用戶界面的Inspector 端點,用于檢查當前設備狀態

易于開發,因為它可以通過Xcode直接啟動和調試

尚不支持,但與tvOS和OSX一起使用

WDA Client

WDA Client是基于WebDriverAgent實現的WDA的客戶端。

我們在 iOS 設備上啟動了 WDA 的服務端。為了運行 Mac OS 上的腳本,我們需要在 Mac OS 上安裝 WDA 客戶端。

facebook-wda 就是 WDA 的 Python 客戶端庫,通過直接構造HTTP請求直接跟WebDriverAgent通信。

#安裝WDApython客戶端 pip3install--prefacebook-wda

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 自動化測試
    +關注

    關注

    0

    文章

    204

    瀏覽量

    26895
  • iOS
    iOS
    +關注

    關注

    8

    文章

    3393

    瀏覽量

    150456

原文標題:Appium +iOS 自動化測試全網最全教程(實踐、總結 、踩坑)

文章出處:【微信號:TestinChina,微信公眾號:Testin云測】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    OPhone自動化測試技術概述

    本文將對OPhone平臺上可采用的幾種自動化測試技術進行介紹,并對每種技術的優缺點做簡要的總結。OPhone臺除了為應用程序開發提供豐富的API外,也為開展自動化
    發表于 05-06 08:58

    Linux學習過程過的與如何解決

    Linux記錄記錄Linux學習過程過的與如何解決1解決方法:F10進入BIOS使能
    發表于 11-04 08:44

    軟件自動化測試方案的效益分析

    首先對手工測試自動化測試進行比較,然后提出自動化測試方案選擇需要考慮的方面,并結合工作實踐,給
    發表于 03-01 15:05 ?14次下載

    基于Web的自動化測試框架的研究

    根據web系統測試的特點,為提高軟件測試自動化腳本的可重用性,結合在實際項目中軟件自動化測試實踐
    發表于 11-07 15:58 ?0次下載
    基于Web的<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>框架的研究

    自動化測試系統的最佳實踐指南秘籍

    自動化測試系統的最佳實踐指南秘籍 ,學習資料。
    發表于 03-21 16:02 ?0次下載

    SaaS產品自動化測試實例分析

    【摘要】本文講述某個企業級SaaS產品自動化測試項目的實踐過程。文章介紹了項目遇到的挑戰、應對策略和實施過程,最后總結了企業級SaaS產品給自動化
    發表于 09-28 15:54 ?1次下載
    SaaS產品<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>實例分析

    Android 手機自動化測試工具有哪幾種

    Android 手機自動化測試工具有哪幾種:Monkey是Android SDK自帶的測試工具.MonkeyRunner也是Android SDK提供的測試工具。Instrumenta
    的頭像 發表于 02-06 15:35 ?1.1w次閱讀

    ATE自動化測試系統是什么_ATE自動化測試系統介紹

    本文首先介紹了ATE自動化測試系統發展線路,其次闡述了ATE自動化測試系統的作用及原理、特點、優勢,最后介紹了ATE自動化
    發表于 05-23 16:47 ?3.2w次閱讀

    嵌入式Linux記錄

    Linux記錄記錄Linux學習過程過的與如何解決1解決方法:F10進入BIOS使能
    發表于 11-01 17:21 ?10次下載
    嵌入式Linux<b class='flag-5'>踩</b><b class='flag-5'>坑</b>記錄

    STM32CubeIDE+FREERTOS記錄

    STM32CubeIDE+FREERTOS記錄
    發表于 12-05 18:06 ?15次下載
    STM32CubeIDE+FREERTOS<b class='flag-5'>踩</b><b class='flag-5'>坑</b>記錄

    什么是自動化測試框架

    自動化測試框架,即是應用于自動化測試所用的框架。按照框架的定義,自動化測試框架要么是提供可重用的
    發表于 04-18 14:44 ?878次閱讀

    python自動化測試攻城記

    本文介紹實施自動化測試需要具備的技能及具體實踐流程。
    的頭像 發表于 08-16 11:39 ?1027次閱讀
    python<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>攻城記

    推挽電路的,你過沒?

    推挽電路的,你過沒?
    的頭像 發表于 11-24 16:25 ?1075次閱讀
    推挽電路的<b class='flag-5'>坑</b>,你<b class='flag-5'>踩</b>過沒?

    電源測試怎么自動化?電源模塊自動化測試系統如何實現?

    納米軟件在電測行業深耕十余年,在行業的大背景下,為了進一步完善自動化測試,開發出了新的智能的電源模塊自動化測試系統ATECLOUD-POW
    的頭像 發表于 12-15 14:40 ?835次閱讀
    電源<b class='flag-5'>測試</b>怎么<b class='flag-5'>自動化</b>?電源模塊<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>系統如何實現?

    自動化仿真系統搭建實踐

    今天我們分享TIAV17+PLCSIM+PS+SIMIT:自動化仿真系統搭建實踐
    的頭像 發表于 01-04 11:28 ?2022次閱讀
    <b class='flag-5'>自動化</b>仿真系統搭建<b class='flag-5'>實踐</b>