Macaca依賴的功能模組非常多,安裝過程很複雜,不過這是目前所有自動化測試框架的通病。

Macaca自動化測試框架

Node.js

請安裝Node.jsv6.0或者更高版本,裝好Node.js後命令行裡就已經整合npm工具。

預設情況下,npm命令下載的全域性模組會存放在系統目錄下,這會導致後續操作有很多坑,因此,需要修改預設的全域性模組(node_global)的存放路徑以及快取(global_cache)的路徑。

在使用者目錄下新建node_modules資料夾,在下面建立node_globalnode_cache兩個資料夾,修改預設全域性路徑:

$ npm config set prefix "/Users/[使用者名稱]/node_modules/node_global"
$ npm config set cache "/Users/[使用者名稱]/node_modules/node_cache"

配置Node環境變數,讓系統識別npm下載的全域性模組:

$ vim ~/.bash_profile
[按下i,顯示insert,進入輸入模式,輸入如下配置]
NODE_HOME="/Users/[使用者名稱]/node_modules/node_global"
export PATH="$NODE_HOME/bin:$PATH"
export NODE_HOME
[按esc,輸入:wq!儲存]
$ source ~/.bash_profile
$ echo $NODE_HOME

Android 環境

安裝JDK1.8,並配置Java環境變數:

$ /usr/libexec/java_home
[儲存得到JAVA_HOME的路徑]
$ vim ~/.bash_profile
[按下i,顯示insert,進入輸入模式,輸入如下配置]
JAVA_HOME="[JAVA_HOME的路徑]"
CLASS_PATH="$JAVA_HOME/lib"
export PATH="$JAVA_HOME/bin:$PATH"
export JAVA_HOME
[按esc,輸入:wq!儲存]
$ source ~/.bash_profile
$ echo $JAVA_HOME

安裝18-25版本中的任一SDK和Android Support Repository,並配置Android環境變數:

$ vim ~/.bash_profile
[按下i,顯示insert,進入輸入模式,輸入如下配置]
ANDROID_HOME="[ANDROID_HOME的路徑]"
export PATH="$ANDROID_HOME/tools:$PATH"
export PATH="$ANDROID_HOME/platform-tools:$PATH"
export PATH="$ANDROID_HOME/emulator:$PATH"
export ANDROID_HOME
[按esc,輸入:wq!儲存]
$ source ~/.bash_profile
$ echo $ANDROID_HOME

執行android測試用例前要配置Gradle環境變數:

$ vim ~/.bash_profile
[按下i,顯示insert,進入輸入模式,輸入如下配置]
GRADLE_HOME="[GRADLE_HOME的路徑]"
export PATH="$GRADLE_HOME/bin:$PATH"
export GRADLE_HOME
[按esc,輸入:wq!儲存]
$ source ~/.bash_profile
$ echo $GRADLE_HOME

iOS 環境

下載Xcode8.3或者更高版本,安裝Homebrew(一款常用的 MacOS 的包管理器)以使用brew命令。

安裝usbmuxd以便於通過USB通道測試iOS真機:

$ brew install usbmuxd

安裝ideviceinstallerios-deploy用來給真機安裝App:

$ brew install ideviceinstaller
$ brew install ios-deploy

ios-webkit-debug-proxy以便於測試App中的WebView:

$ brew install ios-webkit-debug-proxy

安裝carthage來構建Macaca XCTestWD:

$ brew install carthage

Macaca環境配置

$ npm i -g macaca-cli

安裝不同的驅動以適應不同平臺的支援:

$ npm i macaca-ios -g
$ npm i macaca-android -g
$ npm i macaca-electron -g
$ npm i macaca-chromedriver -g

檢查當前Macaca的安裝環境是否配置成功:

$ macaca doctor

Python環境配置

因為使用python語言開發,所以需要先安裝python的開發環境。Mac已經有了Python 2.x,所以就不用再安裝了,不過為了以後方便,可以再安裝一個python3:

xcode-select --install
[檢視已有的python2.7版本]
$ python --version
[利用homebrew搜尋python3]
$ brew search python
$ brew install python3

安裝完成後可以在/usr/local/Cellar/下看到python3的資料夾,接下來就檢查一下剛剛安裝的python3與系統的python路徑:

$ which python
$ which python3

現在只需要下載安裝unittest等一些Macaca所需的模組即可:

$ sudo pip install [unittest2的whl檔案]
$ [輸入密碼]
$ sudo pip install wd

然後,為了方便開發,可以下載PyCharm社群版來開發python專案。

執行官方示例

$ git clone https://github.com/macaca-sample/sample-python.git --depth=1
$ pip install -r requirements.txt

先啟動伺服器,添加了--verbose可以看到詳細的資訊,新增-p 3456可以設定埠號:

$ macaca server --verbose

分別執行不同平臺的測試用例:

$ python tests/macaca-desktop-sample.test.py
$ python tests/macaca-ios-sample.test.py
$ python tests/macaca-android-sample.test.py

如果是使用PyCharm執行測試用例,一旦匯入unittest模組,PyCharm就會自動識別以unittest的模式去執行。若是想以python直接執行的模式執行,點開右上角的“Edit Configurations”,再點左上角的+號,選擇Python,在右方的配置中選擇要執行的用例檔案即可。

如果在執行Android用例時,在真機上很順利,但到了模擬器上,到開啟百度網頁那裡就報錯Error: chromedriver proxy error with: Error: connect ECONNREFUSED。原因是模擬器裡的瀏覽器版本和本機macaca內建的chromedriver的對應關係問題,具體檢視Android的Webview版本問題,換api19–23之間模擬器一般就可以了。

特別要注意的是,官方示例無法在api22以下的Android系統中執行。

iOS真機除錯前需要重簽名XCTestWD.xcodeproj,Xcode專案所在路徑:xxx/node_modules/macaca-ios/node_modules/xctestwd/XCTestWD.xcodeproj,雙擊開啟Xcode專案,重簽名XCTestWD和XCTestWDUITests,並能正常執行即可。如果是個人開發者,iOS上要在“設定>通用>裝置管理”中信任開發者。