概述
Appium是一個移動端的自動化框架,可用于測試原生應用,移動網頁應用和混合型應用,且是跨平臺的。可用于IOS和Android以及firefox的操作系統。原生的應用是指用android或ios的sdk編寫的應用,移動網頁應用是指網頁應用,類似于ios中safari應用或者Chrome應用或者類瀏覽器的應用。混合應用是指一種包裹webview的應用,原生應用于網頁內容交互性的應用。重要的是Appium是跨平臺的,何為跨平臺,意思就是可以針對不同的平臺用一套api來編寫測試用例。
iOS10后基于UIAutomation的測試框架已經蘋果更改為XCUITest測試框架了,從Appium1.6.3開始Appium也開始支持XCUITest了。由于時間原因,Appium1.6.3以前的測試環境搭建及其工具使用就不再說明,資料網上也是一大把。截止目前最新的是Appium1.6.5,下面介紹下環境搭建過程。
開發環境
系統:macOS Sierra (10.12.4)
開發工具:Xcode 8.3.2(iOS10.3.1)
環境搭建
開始搭建
1、 安裝homebrew:homebrew 簡稱brew,是Mac OSX上的軟件包管理工具,能在Mac中方便的安裝軟件或者卸載軟件,可以說Homebrew就是mac下的apt-get、yum等神器。
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2、 安裝libimobiledevice:libimobiledevice 是一個跨平臺的軟件庫,支持 iPhone?, iPod Touch?, iPad? and Apple TV? 等設備的通訊協議。不依賴任何已有的私有庫,不需要越獄。應用軟件可以通過這個開發包輕松訪問設備的文件系統、獲取設備信息,備份和恢復設備,管理 SpringBoard 圖標,管理已安裝應用,獲取通訊錄、日程、備注和書簽等信息,使用 libgpod 同步音樂和視頻。
$ brew install libimobiledevice --HEAD
3、 安裝carthage:carthage 使用于 Swift 語言編寫,只支持動態框架,只支持 iOS8+的Cocoa依賴管理工具。
$ brew install carthage
4、安裝node:node是安裝npm的前置條件。
$ brew install node
5、安裝npm:npm是一個NodeJS包管理和分發工具,已經成為了非官方的發布Node模塊(包)的標準。
$ brew install npm
6、安裝cnpm:國內直接用npm下載安裝會有好多網絡問題,安裝淘寶的cnpm要比npm好用,https://npm.taobao.org/
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
7、安裝ios-deploy:ios-deploy是一個使用命令行安裝ios app到連接的設備的工具,原理是根據os x命令行工程調用系統底層函數,獲取連接的設備、查詢/安裝/卸載app。
$ cnpm install -g ios-deploy
8、安裝xcpretty: xcpretty是用于對xcodebuild的輸出進行格式化。并包含輸出report功能。
$ gem install xcpretty
9、安裝appium,appium-doctor
$ cnpm install -g appium
$ cnpm install -g appium-doctor
10、使用appium-doctor檢查appium環境
$ appium-doctor //appium-doctor --ios 只檢測iOS環境
info AppiumDoctor Appium Doctor v.1.4.2
info AppiumDoctor ### Diagnostic starting ###
info AppiumDoctor ?? The Node.js binary was found at: /usr/local/bin/node
info AppiumDoctor ?? Node version is 6.10.2
info AppiumDoctor ?? Xcode is installed at: /Applications/Xcode.app/Contents/Developer
info AppiumDoctor ?? Xcode Command Line Tools are installed.
info AppiumDoctor ?? DevToolsSecurity is enabled.
info AppiumDoctor ?? The Authorization DB is set up properly.
info AppiumDoctor ?? Carthage was found at: /usr/local/bin/carthage
info AppiumDoctor ?? HOME is set to: /Users/zhoutq
WARN AppiumDoctor ?? ANDROID_HOME is NOT set!
WARN AppiumDoctor ?? JAVA_HOME is NOT set!
WARN AppiumDoctor ?? adb could not be found because ANDROID_HOME is NOT set!
WARN AppiumDoctor ?? android could not be found because ANDROID_HOME is NOT set!
WARN AppiumDoctor ?? emulator could not be found because ANDROID_HOME is NOT set!
WARN AppiumDoctor ?? Bin directory for $JAVA_HOME is not set
info AppiumDoctor ### Diagnostic completed, 6 fixes needed. ###
info AppiumDoctor
info AppiumDoctor ### Manual Fixes Needed ###
info AppiumDoctor The configuration cannot be automatically fixed, please do the following first:
WARN AppiumDoctor - Manually configure ANDROID_HOME.
WARN AppiumDoctor - Manually configure JAVA_HOME.
WARN AppiumDoctor - Manually configure ANDROID_HOME and run appium-doctor again.
WARN AppiumDoctor - Add '$JAVA_HOME/bin' to your PATH environment
info AppiumDoctor ###
info AppiumDoctor
info AppiumDoctor Bye! Run appium-doctor again when all manual fixes have been applied!
info AppiumDoctor
環境常見問題解決:
? Xcode Command Line Tools are NOT installed!
$ xcode-select --install #按照提示安裝即可
WARN AppiumDoctor ? ANDROID_HOME is NOT set!
建議安裝AS,可以解決其他Android環境的其他問題Android Studio
在.bash_profile/.zshrc文件中設置JAVA和Android環境變量
#android sdk
export ANDROID_HOME=~/Library/Android/sdk
export PATH="$HOME/.yarn/bin:$PATH"
#java_home
export JAVA_HOME=$(/usr/libexec/java_home)
export PATH=$JAVA_HOME/bin:$PATH
export CLASS_PATH=$JAVA_HOME/lib
以上都很簡單,下面重點來了。
11、appium服務端安裝:安裝appium-xcuitest-driver依賴,進入WebDriverAgent安裝目錄,運行bootstrap。
$ cd /usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent (如果WebDriverAgent 所在路徑和此不同,請自行查找)
$ mkdir -p Resources/WebDriverAgent.bundle
$ sh ./Scripts/bootstrap.sh
11.1、用Xcode打開WebDriverAgent,并且編譯進入WebDriverAgent 文件夾,可用如下方法:
若果編譯的過程中有語法錯誤,重新安裝第10步。
11.4、建立服務WebDriverAgent:進入WebDriverAgent 文件夾,建立服務。
$ cd /usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent
$ xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=真機的udid' test
運行到最后會發現
而iphone多了一個WebDriverAgentRunner的app。手動啟動那個app的時候
原因是我們手機并并沒有信任這個apple id的開發者,到設置-通用-設備管理(描述文件) 信任你的apple id就可以了。再次運行上述命令,看到如下圖,就成功了,
12. 安裝appium client端:appium client有ruby,python,java三個版本,可自行選擇自己喜歡的安裝即可,這里只說Python版安裝,具體見下面查看資料3。
pip安裝
$ pip install Appium-Python-Client
如果安裝過程出現 could not create ‘/Library/Python/2.7/site-packages/appium’: Permission denied 錯誤,
使用 pip install Appium-Python-Client –user 命令可以安裝成功
源碼安裝 在Pipy上下載源碼安裝
$ tar -xvf Appium-Python-Client-X.X.tar.gz
$ cd Appium-Python-Client-X.X
$ python setup.py install
github安裝
$ git clone https://github.com/appium/python-client.git
$ cd python-client
$ python setup.py install
13、測試流程:
下載測試代碼并且測試,網上一個簡單的測試代碼:erduoniba/appium_ios_sample_code,自己寫可以參考Python + Appium+ IOS自動化測試。
對于如何利用app-inspector獲取界面元素,請參考app-inspector官方文檔。
13.1、先啟動appium服務器:
$ appium -U xxxxxxx // xxxxx 真機設備ID
13.2、接下來連上真機 執行測試用例代碼:
$ cd sample-code/examples/python
$ python ios_simple_device.py
test_scroll (__main__.SimpleIOSTests) ... ok
----------------------------------------------------------------------
Ran 1 test in 30.421s
OK
踩過的坑
1、1 - 10步安裝過程中的權限問題:chmod -R 777 pathForFile,然后重新運行該命令。
2、第11.4步我在安裝的時候一直沒有Listening on USB這一行信息,不過服務正常可以使用。
3、在測試過程中一直提示第11.4步第一個圖的錯誤的話,拔數據線,關測試機,重啟,重插。
參考資料
1、Appium在 MAC 上搭建 appium1.6.3 過程:https://testerhome.com/topics/6962
2、appium1-macOS10.12下如何絲滑的使用appium?:http://www.lxweimin.com/p/05943804c25e
3、Appiumappium + iOS10.2 + Xcode8.2.1 + React Native 完成自動化測試:https://testerhome.com/topics/7775