iOS自動化測試之Appium的安裝和使用

語言: CN / TW / HK

一、前言

因為需要配合測試同學處理自動化測試方面的東西,所以記錄下來自己關於Appium的安裝和使用,但是主要是關於安裝的,因為安裝真是遇到了很多坑,另外,我只是關注iOS App的測試,所以這裡沒有測試Android。

Appium 是一個開源工具,用於自動化 iOS 手機、 Android 手機和 Windows 桌面平臺上的原生、移動 Web 和混合應用。 Appium的核心是 客戶端+服務端 架構。所以需要下載客戶端和服務端。

  • 關於Appium: http://appium.io/docs/cn/about-appium/intro/
  • GitHub地址:https://github.com/appium/appium-desktop

二、Appium Desktop

對於Appium Desktop,有2種安裝方式,命令列和安裝包,我這裡直接去GitHub下載安裝包: Github地址:https://github.com/appium/appium-desktop

Appium Desktop

在使用之前,需要閱讀一遍Appium的官方文件,理解裡面的一些概念。文件裡是有中文的。 文件地址:https://github.com/appium/appium/tree/master/docs

三、使用iOS模擬器

推薦這個,比較方便,配置環境簡單,需要電腦上安裝好Xcode+Appium即可。 啟動Appium之後,來到此頁面:

Appium

在這裡輸入5個欄位即可: - platformName固定值:iOS - platformVersion固定值:iPhone Simulator - automationName固定值:automationName - platformVersion模擬器系統版本號,開啟iOS模擬器在關於裡能看到 - app:要安裝到模擬器裡面的安裝包地址,需要是絕對路徑,經測試,需要是.app結尾的安裝包

這些能力欄位,官方文件是有解釋和舉例的。

填寫完畢之後,點選啟動會話,即可自動開啟模擬器。都填寫完畢後的例子: json { "platformName": "iOS", "deviceName": "iPhone Simulator", "automationName": "XCUITest", "platformVersion": "14.5", "app": "/Users/hou/Desktop/name.app" }

注意:app欄位的安裝包,對於iOS開發而言,很容易得到這個檔案,iOS專案工程在模擬器執行成功,就可以在Xcode的工程目錄裡找到它。

四、使用iOS真機

4.1 Doctor(可選)

這一步是可選的, 只是為了方便排查問題,不想裝也沒有問題,不過如果iOS和Android都需要自動化測試的話,建議安裝一下。 appium-doctor安裝(依賴npm,所以需要有裝過node):

shell npm install appium-doctor -g

安裝後執行appium-doctor --ios指令,可以檢視與iOS相關配置是否完整。比如我執行的結果:

Appium

4.2 Homebrew

homebrew是 Mac OS 下最優秀的包管理工具,沒有之一。去官網首頁,上面有安裝的命令。已經安裝過的不用管這個。

```shell

homebrew官網地址:

https://brew.sh/index_zh-cn ```

4.3 Python3(一般不用自己裝)

安裝Python3,目前Mac系統會自帶兩個版本的Python2和Python3,不用自己再安裝了,真想自己安裝可以使用brew管理和安裝: ```shell

安裝之前,先看看系統是否已經安裝過Python3了

brew install python3 ```

4.4 idevice(可選)

libimobiledevice是一個使用原生協議與蘋果iOS裝置進行通訊的庫。通過這個庫我們的 Mac OS 能夠輕鬆獲得 iOS 裝置的資訊,安裝命令: shell brew install libimobiledevice

libimobiledevice的一些使用方法: ```PowerShell

檢視 iOS 裝置日誌

idevicesyslog

檢視連結裝置的UDID

idevice_id --list idevice_id -l

檢視裝置資訊

ideviceinfo

獲取裝置時間

idevicedate

獲取裝置名稱

idevicename

埠轉發

iproxy XXXX YYYY

螢幕截圖

idevicescreenshot ```

這裡之所以說是可選的,是因為如果裝了Xcode,通過Xcode的整合工具,也能拿到裝置資訊和列表。命令是:instruments -s devices。或者在Xcode的Window-->Devices and Simulators也可以看到。

4.5 安裝Carthage

Carthage是一款iOS專案依賴管理工具,與Cocoapods有著相似的功能,可以幫助你方便的管理三方依賴。它會把三方依賴編譯成framework,以framework的形式將三方依賴加入到專案中進行使用和管理。 WebDriverAgent本身使用了Carthage管理專案依賴,因此需要提前安裝Carthage。命令: PowerShell brew install carthage

4.6 獲取WebDriverAgent

WebDriverAgent是 Facebook 推出的一款 iOS 移動測試框架,能夠支援模擬器以及真機。 WebDriverAgent在 iOS 端實現了一個WebDriver server,藉助這個 server 我們可以遠端控制 iOS 裝置。你可以啟動、殺死應用,點選、滾動檢視,或者確定頁面展示是否正確。 Clone下專案,Github地址是: PowerShell https://github.com/facebookarchive/WebDriverAgent

使用GUI或者命令Clone: PowerShell git clone https://github.com/facebook/WebDriverAgent.git

下載專案之後,使用命令進行操作,確保之前已經安裝過 Carthage: PowerShell cd WebDriverAgent ./Scripts/bootstrap.sh

上面這種辦法我自己試了試是不行了,我是使用下面這種: 先安裝好Appium,電腦-應用程式->Appium.app->右鍵-顯示包內容->Contents,然後搜尋WebDriverAgent.xcodeproj,如下圖:

WebDriverAgent

搜到之後,對檔案進行右鍵,如下圖:

WevDriverAgent

然後將新開啟的檔案,全部複製到一個新的資料夾(比如自己主頁目錄下)去,例如:

WebDriverAgent

4.7 編譯WebDriverAgent

使用Xcode開啟WebDriverAgent工程,配置好證書之後,點選Xcode的Product->Test,然後就會執行到手機上, 控制檯會輸出手機的服務埠號:

WebDriverAgent

這裡我遇到一個坑,這個地址,直接輸入到電腦瀏覽器裡, 是能得到一個JSON的,這樣才是正確的,但是我瀏覽器怎麼都得不到,而且明明是同一個網路的。後來我的辦法是使用了iproxy進行了埠轉發,過程是:

```PowerShell

1.安裝 usbmuxd

brew install usbmuxd

2.獲取手機的udid

idevice_id -l

3.設定埠轉發

第一個8900:為電腦端的埠 第二個8100:為手機端webdriveragent服務的埠

最後的數字:為自己手機的序列號

iproxy 8900 8100 -u 743430xxxxxxxxd9bc99 ```

這時,我在電腦瀏覽器輸入地址就可以得到JSON了,需要注意的是,埠號的問題。比如你替換了埠,那麼你瀏覽器輸入的地址就是:http://127.0.0.1:8900

這裡我參考的文章:https://codetosurvive1.github.io/posts/webdriver-agent-usb.html

這個坑的解決:我後來查看了Xcode專案,發現是專案的開發者賬號問題,在解決了開發者賬號和bundleId之後,已經正常了,瀏覽器輸入Xcode輸出的地址,可以看到JSON。

web

一定要檢查下圖中標出來的開發者賬號和bundleId。

xcode

4.8 編譯WebDriverAgent

在啟動Xcode專案WebDriverAgent之後,並且安裝到真機之後,開啟Appium,啟動服務,來到這個頁面,輸入下面的的能力欄位,應該是就可以連線到真機了。

Appium

例如我填寫的JSON: json { "platformName": "iOS", "platformVersion": "14.0", "deviceName": "iPhone8", "automationName": "XCUITest", "bundleId": "com.xxxx.xx", // 要測試App的bundleId "udid": "xxexxx" // 真機的udid,如果電腦只連結了一個真機,可以填寫auto }

五、Appium使用

Appium使用我沒太深入研究,因為我主要是配合測試同學的,不過Appium的Github上,是有中文文件的,全部看一遍,簡單的錄製和指令碼還是很容易上手的。

5.1 開啟Appium

Appium

Host不用管,不填寫就是本機,跟填127.0.0.1是一樣的。點選啟動伺服器

注意,在Appium的選單-->檢視-->語言。是切換成中文顯示的。

Appium

點選右上角的 放大鏡🔍,進入主配置介面 填寫裝置資訊即可

Appium

如上圖,在啟動之後,如果環境配置有問題,會有提示資訊的,一般情況下,安裝提示解決就可以,不過在啟動Appium之前,建議通過appium-doctor驗證環境都是通過的。

六、遇到過的坑

✖ Error running xcrun simctl

修改Xcode命令列設定:Xcode > Preferences > Locations

Locations

✔ Xcode is installed at: /Applications/Xcode.app/Contents/Developer ✔ Xcode Command Line Tools are

✖ Carthage was NOT found!

使用Homebrew安裝Carthage即可。

✖ opencv4nodejs cannot be found.

下載cmake:https://cmake.org/download/ 安裝後配置環境變數 PowerShell "/Applications/CMake.app/Contents/bin/" sudo cnpm -g install opencv4nodejs --unsafe-perm=true --allow-root --loglevel silly cnpm install opencv4nodejs

✖ ffmpeg cannot be found

下載FFmpeg:https://ffmpeg.zeranoe.com/builds/,然後配置環境變數

✖ mjpeg-consumer cannot be found.

安裝: PowerShell sudo cnpm i -g mjpeg-consumer --unsafe-perm=true --allow-root

✖ set-simulator-location is not installed

PowerShell brew install lyft/formulae/set-simulator-location

✖ idb and idb_companion are not installed

PowerShell brew tap facebook/fb brew install idb-companion pip3.8 install fb-idb # 和自己的py版本一致

✖ applesimutils cannot be found

PowerShell brew tap wix/brew brew install applesimutils

✖ ios-deploy cannot be found

PowerShell sudo cnpm install -g ios-deploy --unsafe-perm=true --allow-root

✖ bundletool.jar cannot be found

下載檔案,配置環境變數 http://appium.io/docs/en/writing-running-appium/android/android-appbundle/

✖ gst-launch-1.0 and/or gst-inspect-1.0 cannot be found

PowerShell brew install gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-libav

最後使用appium-doctor驗證環境配置。

END。
我是小侯爺。
在帝都艱苦奮鬥,白天是上班族,晚上是知識服務工作者。
如果讀完覺得有收穫的話,記得關注和點贊哦。
非要打賞的話,我也是不會拒絕的。