ios模擬器上UI自動化測試
以appium+webdriverio為例,詳細介紹如何在模擬器上安裝和測試app。在使用ios模擬器前,需要安裝xcode,創建和啟動一個simulator。simulator創建好后,就可以使用xcrun simctl命令安裝被測應用并開始測試了。xcrun simctl常用命令,當然還可以使用xcrun simctl創建、關閉模擬器。
//顯示所有的ios simulators,booted代表處于啟動狀態
xcrun simctl list devices// 刪除模擬器
xcrun simctl delete <simualtor-udid>//啟動模擬器
xcrun simctl boot <simulator-udid>//安裝.app包到模擬器上
xcrun simctl install <simulator-udid> <app-path>
上面命令中,xcrun是xcode工具鏈中一個命令行工具調度器,他的作用是自動找到并調用對應版本的開發工具,例如調用對應版本的simctl或者xcodebuild等工具。通過xcrun保證了調用的工具版本與xcode版本一致。simctl是apple提供個一個命令行工具,用于管理和控制ios模擬器(simulator),它是xcode的一部分。
上面的初始化準備工作完成后,可以在webdriverio中下載ui自動化測試的sample代碼。在sample代碼中創建apps目錄,并將被測app的zip文件拷貝到apps目錄下。webdriverio分別準備了android和ios的被測應用包。修改配置文件,將配置文件中模擬器版本進行修改,修改完畢后,即可執行“npm run ios”開始UI自動化測試了,程序會自動執行sample代碼已經寫好的自動化測試代碼。配置文件內容如下所示:
運行命令后,appium會自動安裝WebDriverAgent,啟動被測應用,并自動執行UI自動化測試。
WebDriverAgent
WebDriverAgent作用是什么呢?WebDriverAgent簡稱為WDA,WDA是由Facebook開源,現由Appium團隊維護的一個IOS端測試服務App,這個App由Apple官方的XCTest測試框架編寫,用于控制ios的UI。例如通過bundldID啟動app,查找元素,執行點擊、滑動等操作。當這個app被安裝到真機或者模擬器后,會監聽本地的HTTP接口,接受json請求來控制手機UI。當使用appium開展ios的自動化測試時,需要安裝XCUITest Driver,Driver的作用又是什么呢?Driver負責編譯和部署WDA到目標設備上,與WDA通過http請求進行通信,轉化Appium客戶端請求為WDA支持的請求。Appium客戶端、Appium Server、Driver,WDA之間的交互如下圖所示,這也是UI自動化測試在ios模擬器或者真機上的執行過程。
ios真機上UI自動化測試
通過appium在ios真機上執行UI自動化測試同樣也需要安裝WDA,iOS系統由強制的安全機制,所有App包括WDA必須簽名才能在真機上運行。在appium官網中給出了創建Provisioning Profile的詳細過程。什么是Provisioning Profile?Provisioning Profile是Apple的一種授權機制,它將一個或者多個Apple設備的UDID,一個Apple開發者證書,一個或者多個App的bundleId綁定在一起,告訴iOS系統“這個App可以被允許安裝和運行在指定設備上。”所以,如果要在ios真機上運行UI自動化測試,首選需要申請一個Apple的付費賬戶。接著完成下面的配置。
1.在ios上開啟開發者模式,不通的ios版本有所不同,可按版本查看如何開啟正機上的開發者模式
2.開發者模式下開啟“UI自動化測試”
3.信任這個設備,用USB連接IOS真機后,一般會跳出彈框,點擊信任即可
4.Mac和IOS上登錄付費的Apple ID賬戶
5.在xcode上打開WDA項目,安裝驅動的時候,默認會安裝WDA項目
WDA項目包含在appium-webdriveragent中,而appium-webdriveragent是XCUITest驅動程序的依賴項。因此,您可以在/path/to/xcuitest/driver/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj找到項目文件。默認情況下,驅動程序安裝在~/.appium目錄下,因此項目文件位于~/.appium/node_modules/appium-xcuitest-driver/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj。如果使用的是XCUITest驅動程序4.13.0或更高版本,您可以運行appium driver run xcuitest open-wda腳本,直接在Xcode中打開WebDriverAgent.xcodeproj。在xcode中打開該項目后,默認的bundleId是com.facebook.WebDriverAgentRunner,修改這個bundleID為一個新的bundleId,勾選“Automatically manage signing",修改bundleID后即可生成Provisioning Profile文件。
接著在Product-Scheme中選擇WebDriverAgentRunner,Product-Destination中選擇目標真機,進行編譯運行,即可把WDA安裝到目標真機上。
WDA安裝好后,即可通過appium驅動完成真跡的自動化測試,當然也可以在Appium inspector中啟動應用,查看應用頁面所有元素的locator。在ios真機上能看到安裝的WDA,如下圖所示:
下面就是通過appium inspector啟動ios真機,查看被測app的頁面元素locator。
在使用ios真機進行UI自動化測試時,通常會使用ideviceinstaller工具。ideviceinstaller是一個開源工具,用于在iOS真機上安裝、卸載、管理應用。常用命令如下所示
//安裝ipa包到ios真機上
ideviceinstaller -i xx/path/xx.ipa//查看真機上安裝的app信息,通常用于查看app的bundleID
ideviceinstaller -l
以上就是通過appium在iOS真機上進行UI自動化測試的配置過程。總結而言,就是需要為WDA項目生產Provisioning profile文件,再安裝WDA到目標真機上,這樣WDA才能在目標真機上控制任意需要被測試的APP UI。