stf簡介:

環境:mac 電腦
依賴 Python3.6+, NodeJS 8
$ brew install node
NodeJS版本太高了也不行,一定要NodeJS 8,推薦使用nvm管理node版本
1、 安裝adb環境,記得配置環境變量。
正常應該看到如下:

nodejs 版本(需要8.X.0版本,是基於8.XX開發的,新的node可能會出現兼容問題): 8.14.0

在安裝過程中,出現錯誤:npm ERR! code ETARGET,先查看版本是否存在(訪問命令行中地址,下載成功,版本存在),再查看鏡像是否是公司鏡像,如是,請更新鏡像為 https://registry.npmjs.org, 重新安裝成功。
$npm config get registry
$npm config set registry https://registry.npmjs.org
node升降級方法: $sudo npm install n -g $sudo n 8.X.0 # X為你想要的版本
安裝匹配版本的npm:
$ cnpm install npm@6.4.1 -g
2、 檢查是否安裝brew(如按步驟1安裝的adb應該已裝brew):brew -v

3、Git配置SSH Key:
生成密鑰#ssh-keygen -t rsa -C "git注冊郵箱"
查看密鑰#cat /Users/cdtanghui3/.ssh/id_rsa.pub
Git中填寫密鑰:

測試#ssh -T git@github.com,如出現以下提示即配置成功。

4、 選擇最新git包(Batch control based on STF support Mac/Linux,基於stf二次開發群控管理平台,支持Mac,Linux部署,一機多控):https://github.com/EasilyTest/stf.git
本地新建stf路徑后進入該文件夾中,
$git clone https://github.com/EasilyTest/stf.git
5、 安裝 brew 以及nodejs后,運行以下命令, 安裝stf依賴包:
$cd /
$ pip3 install -U "tidevice[openssl]" #如安裝報錯,使用下述命令安裝,使用python3.6+版本下載安裝,如版本小於3.6,brew install python安裝最新版
$pip3 install -U tidevice #阿里內部小組用來做 iOS 自動化用的工具
$brew uninstall --ignore-dependencies XXX #如有安裝老版本,請卸載后安裝
$brew install --HEAD usbmuxd #USBMuxd連接方式不需要做MFI認證,支持iPhone上的App跟外設通過進行通信
$brew unlink XXX #如有安裝老版本,請先去鏈接綁定
$brew link usbmuxd
$brew install --HEAD libimobiledevice #libimobiledevice 是一個跨平台的軟件庫,支持 iPhone®, iPod Touch®, iPad® and Apple TV® 等設備的通訊協議。
$brew install --HEAD ideviceinstaller #管理iOS設備上應用程序的安裝與卸載,以及查看相關信息。
$brew install carthage #提供OS X平台的pkg安裝文件,管理iOS三方庫。
$brew install socat #實現遠程DEBUG
$brew install rethinkdb graphicsmagick zeromq protobuf yasm pkg-config #安裝rethinkdb
$brew install --cask android-platform-tools #安裝adb,如步驟1已安裝,此命令不執行。
6、 進入stf路徑下修改文件

(1)在package.json中,將"node-sass",從"^3.13.1",改為"^4.13.1”。
(2)在bower.json中,將“ ng-context-menu”從“ AdiDahan / ng-context-menu#~1.0.5”更改為“ swimlane/ng-context-menu#~1.0.1”。
7、 進入stf根目錄(安裝依賴)
$npm install –unsafe-perm
如果沒報錯繼續下一步。否則跳轉到第10步。
8、更新依賴關聯
$npm link
9、檢查stf環境
$stf doctor

執行遇見問題:ERR/cli:doctor 80758 [*] Unexpected error checking ZeroMQ: Error: Could not locate the bindings file. Tried:
解決方法:$npm rebuild
再次$stf doctor,成功

8、 啟動stf
$stf local
報錯:

2021-04-25T08:30:35.107Z FTL/db 82194 [*] No hosts left to try 2021-04-25T08:30:35.107Z FTL/util:lifecycle 82194 [*] Shutting down due to fatal error /Users/cdtanghui3/Downloads/STF/stf/node_modules/bluebird/js/main/promise.js:680 throw e; ^ ExitError: Exit code "1" at ChildProcess.<anonymous> (/Users/cdtanghui3/Downloads/STF/stf/lib/util/procutil.js:49:23) at emitTwo (events.js:126:13) at ChildProcess.emit (events.js:214:7) at Process.ChildProcess._handle.onexit (internal/child_process.js:198:12)
原因:可能沒有啟動rethinkdb命令。
解決辦法:$rethinkdb& #啟動rethinkdb

再次$ stf local,啟動成功
9、一機多控

10、問題處理(終極解決方法)
在stf根目錄下,執行命令:$npm list --depth=0
對比自己的版本和下面的版本是否一致。優先對比紅色字體部分。
步驟為:
$npm uninstall XXX
$npm install XXX@xxx
或npm audit fix
├── @slack/client@3.16.0
├── adbkit@2.11.1
├── adbkit-apkreader@3.2.0
├── adbkit-monkey@1.0.1
├── android-device-list@1.2.3
├── async@2.6.3
├── aws-sdk@2.744.0
├── basic-auth@1.1.0
├── bluebird@2.11.0
├── body-parser@1.19.0
├── bower@1.8.8
├── bplist@0.0.4
├── bufferutil@1.3.0
├── chai@3.5.0
├── chalk@1.1.3
├── compression@1.7.4
├── cookie-session@2.0.0-rc.1
├── css-loader@0.23.1
├── csurf@1.11.0
├── debug@2.6.9
├── del@2.2.2
├── eslint@3.19.0
├── event-stream@3.3.5
├── eventemitter3@1.2.0
├── exports-loader@0.6.4
├── express@4.17.1
├── express-validator@2.21.0
├── extract-text-webpack-plugin@1.0.1
├── file-loader@0.9.0
├── file-saver@1.3.3
├── formidable@1.2.2
├── fs-extra@8.1.0
├── gm@1.23.1
├── gulp@3.9.1
├── gulp-angular-gettext@2.3.0
├── gulp-eslint@3.0.1
├── gulp-jsonlint@1.3.2
├── gulp-protractor@3.0.0
├── gulp-pug@3.3.0
├── gulp-run@1.7.1
├── gulp-util@3.0.8
├── hipchatter@0.3.2
├── html-loader@0.4.5
├── http-https@1.0.0
├── http-proxy@1.18.1
├── images@3.2.3
├── imports-loader@0.6.5
├── in-publish@2.0.1
├── jasmine-core@2.99.1
├── jasmine-reporters@2.3.2
├── jpeg-turbo@0.4.0
├── json-loader@0.5.7
├── jws@3.2.2
├── karma@1.7.1
├── karma-chrome-launcher@2.2.0
├── karma-firefox-launcher@1.3.0
├── karma-ie-launcher@1.0.0
├── karma-jasmine@2.0.1
├── karma-junit-reporter@1.2.0
├── karma-opera-launcher@1.0.0
├── karma-phantomjs-launcher@1.0.4
├── karma-safari-launcher@1.0.0
├── karma-webpack@1.8.1
├── ldapjs@1.0.2
├── less@2.7.3
├── less-loader@2.2.3
├── lodash@4.17.21
├── markdown-serve@0.3.3
├── memory-fs@0.3.0
├── mime@1.6.0
├── minicap-prebuilt-beta@2.4.0
├── minimatch@3.0.4
├── minitouch-prebuilt-beta@1.3.0
├── my-local-ip@1.0.0
├── ng-context-menu@0.1.1
├── node-libs-browser@1.1.1
├── node-sass@4.14.1
├── node-unzip-2@0.2.8
├── openid@2.0.7
├── passport@0.3.2
├── passport-oauth2@1.5.0
├── passport-saml@0.15.0
├── phantomjs-prebuilt@2.1.16
├── please-update-dependencies@2.0.0
├── protobufjs@3.8.2
├── protractor@5.4.4
├── protractor-html-reporter-2@1.0.4
├── proxy-addr@1.1.5
├── pug@2.0.4
├── raw-loader@0.5.1
├── request@2.88.2
├── request-progress@2.0.1
├── request-promise@4.2.6
├── rethinkdb@2.4.2
├── sass-loader@4.1.1
├── script-loader@0.7.2
├── semver@5.7.1
├── serve-favicon@2.5.0
├── serve-static@1.14.1
├── sharp@0.22.1
├── sinon@1.17.7
├── sinon-chai@2.14.0
├── sleep@6.3.0
├── socket.io@2.3.0
├── socket.io-client@1.4.8
├── split@1.0.1
├── stf-appstore-db@1.0.0
├── stf-browser-db@1.0.2
├── stf-device-db@1.2.0
├── stf-syrup@1.0.0
├── stf-wiki@1.0.0
├── style-loader@0.13.2
├── swagger-express-mw@0.7.0
├── swagger-tools@0.10.4
├── teen_process@1.15.0
├── temp@0.8.4
├── template-html-loader@0.0.3
├── then-jade@2.4.4
├── transliteration@1.6.6
├── url-join@1.1.0
├── url-loader@0.5.9
├── utf-8-validate@1.2.2
├── uuid@3.4.0
├── UNMET PEER DEPENDENCY webpack@1.15.0
├── webpack-dev-server@3.11.0
├── ws@3.3.3
├── yargs@6.6.0
└── zmq@2.15.3
11、
ios 不顯示問題
通過查看源代碼發現,這里代碼里面寫死了wda包名。需要修改為手機上安裝的wda的包名。
機上安裝的wda的包名查看方式:先找到webdriveragent app,使用命令:
% ideviceinstaller -l|grep 'WebDriverAgentRunner-Runner'
或者在xcode中查看:

12、其他問題
(1)zmq 未綁定
在stf根目錄:
npm install --save zmq
echo 'require("zmq")' | node
cd node_modules/zmq/; node-gyp configure
(2)執行stf 命令,提示權限不足
chmod 777 路徑
(3)移除stf/node_modules
npm install rimraf -g
rimraf node_modules
(4)stf 卸載
npm uninstall -g stf


