目錄
試想一下,如果公司的設備有限,有的人要用一下,只是看一個東西,借走了設備很久不還。 有的時候開發在別的樓層,想看個東西。或者跟你一起重現一下bug. 那麼得跑來跑去的。 有沒有辦法共享一下屏幕?讓他不需要浪費在路上,或者佔用設備資源。STF就可以解決這個問題。什麼是OpenSTF?
OpenSTF是一個手機設備管理平臺,可以對手機進行遠程管理、調試、遠程手機桌面監控等操作。 這個系統類似於目前很流行的雲測服務比如Testin,雖然網頁上提供的設備很像模擬器中的設備,但是實際上都是真機。
OpenSTF是使用nodejs和angularjs開發,遵循apache licene2.0開源協議,用戶可以對源碼進行修改發佈。 STF把所有的手機都連接到一臺電腦,只要其他電腦和這臺電腦處於同一個局域網下(公司內部一般都是處於一個局域網下), 那麼其他電腦就可以通過瀏覽器輸入地址,訪問這電腦所連接的所有設備。並且可以上面進行操縱。
OpenSTF的功能:
1、 在Web上支持管理上百個android設備。 2、 支持Android多個版本(2.3.3 ~ 8.0),而且不需要root。 3、 實時屏幕操作和顯示。 4、 支持adb connnect遠程連接調試。 5、 可以從PC機鍵盤輸入到遠程的android設備中。 6、 安裝卸載APK。 7、 android設備信息的展示(如:網絡狀態、MIME、android版本、手機型號等等)。 8、 遠程開關機、遠程開關WIFI、截屏、LogCat等等。
OpenSTF是一個手機設備管理平臺,可以對手機進行遠程管理、調試、遠程手機桌面監控等操作。這個系統類似於目前很流行的雲測服務比如Testin,雖然網頁上提供的設備很像模擬器中的設備,但是實際上都是真機。
官方源碼地址:https://github.com/openstf
OpenSTF是使用nodejs和angularjs開發,遵循apache licene2.0開源協議,用戶可以對源碼進行修改發佈,
- 頁面的HTML使用帕格模版引擎(.pug)
- 前端使用的是Angularjs
- 後端使用的是的NodeJS
- 數據庫使用的是對象型數據庫 Rethinkdb,採用的是json字符串格式保存數據
目錄解讀:
/.tx | transifex網站相關的配置,主要是用於其它語言翻譯 |
/bin | 啓動文件,其實是連接到lib/cli.js |
/docker | Docker的相關配置 |
/lib | 後端代碼 |
/conf | 應該是mysql的配置文件,但是目前沒有使用 |
/doc | 關於STF平臺的說明 |
/test | 檢測平臺的狀態 |
/vendor | 需要安裝到手機上的應用或者服務 |
/node_modules | npm相關組件 |
/rethinkdb_data | rethinkdb的數據庫文件 |
package.json | npm所需要的組件集,以json格式保存 |
………… | 其它說明文件與打包 |
Linux(CentOS7)搭建STF
安裝nodejs
- cd /usr/local
- mkdir node
- cd /usr/local/node
- wget https://nodejs.org/download/release/v8.14.0/node-v8.14.0-linux-x64.tar.gz
- tar -zxvf node-v8.14.0-linux-x64.tar.gz
- mv node-v8.14.0-linux-x64 node-linux-x64
配置環境變量:
- vim /etc/profile
在文件中增加如下內容:
- export NODE_HOME=/usr/local/node/node-linux-x64
- export PATH=$PATH:${NODE_HOME}/bin;
安裝完後,查看版本號,是否安裝成功
npm安裝所在目錄:cd /usr/local/node/node-v8.14.0-linux-x64/lib/node_modules/
之前安裝了node10.x,可能是版本的問題,導致安裝stf一直不成功,後面百度資料,降低node版本到8.14
安裝jdk
輸入java -version,可以看到系統自帶的OpenJDK版本信息。
rpm -qa | grep java
下面這幾個可以刪除, 例如:
- rpm -e --nodeps java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64
檢查是否已經刪除成功
java -version
執行安裝
- 下載JDK文件:/usr/local/node/download/jdk-8u141-linux-x64.tar.gz
- 解壓JDK安裝文件:tar xvzf jdk-8u141-linux-x64.tar.gz
- 移動JDK文件:mv jdk1.8.0_141 /usr/local/java
配置環境變量
- export JAVA_HOME=/usr/local/java/jdk1.8.0_141
- CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib
- export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin;
安裝Android-sdk-linux
- 下載文件:/usr/local/node/download/android-sdk_r24.2-linux.tgz
- 解壓文件:tar xvzf android-sdk_r24.2-linux.tgz
- 移動文件:mv android-sdk-linux /usr/local/Android-SDK
配置環境變量
- export ANDROID_HOME=/usr/local/Android-SDK/android-sdk-linux
- export PATH=$PATH:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools;
上述執行,是沒有包含SDK tools插件的, 可執行以下步驟獲取:
安裝sdk所有的插件:android update sdk --no-ui
普通搭建方式
(1) 安裝rethinkdb數據庫
- cd /usr/local
- mkdir supporters
- cd /usr/local/supporters
- wget http://download.rethinkdb.com/centos/7/`uname -m`/rethinkdb.repo -O /etc/yum.repos.d/rethinkdb.repo
- yum install rethinkdb
可參考:https://rethinkdb.com/docs/start-a-server/
(2) 安裝graphicsmagick
- cd /usr/local/supporters
- wget https://iweb.dl.sourceforge.net/project/graphicsmagick/graphicsmagick/1.3.26/GraphicsMagick-1.3.26.tar.gz
- tar -zxvf GraphicsMagick-1.3.26.tar.gz
- cd GraphicsMagick-1.3.26/
- sudo ./configure --prefix=/usr/local/supporters/config/graphicsmagick
- sudo make
- make install
配置環境變量
- export GRAPHICS_MAGICK_HOME=/usr/local/supporters/config/graphicsmagick
- export PATH=$PATH:${GRAPHICS_MAGICK_HOME}/bin;
驗證安裝結果:
(3) yasm安裝
- cd /usr/local/supporters
- wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
- sudo tar -zxvf yasm-1.3.0.tar.gz
- cd yasm-1.3.0
- ./configure --prefix=/usr/local/supporters/config/yasm
- sudo make
- sudo make install
配置環境變量
- export YASM_HOME=/usr/local/supporters/config/yasm
- export PATH=$PATH:${YASM_HOME}/bin;
查看安裝結果:
(4) libsodium安裝
- cd /usr/local/supporters
- wget https://download.libsodium.org/libsodium/releases/libsodium-1.0.18.tar.gz
- sudo tar xvf libsodium-1.0.18.tar.gz
- cd libsodium-1.0.18/
- sudo ./configure
- sudo make
- sudo make install
查看安裝結果:
(5) Zeromq安裝
- cd /usr/local/supporters
- wget https://github.com/zeromq/libzmq/releases/download/v4.2.2/zeromq-4.2.2.tar.gz
- sudo tar xvf zeromq-4.2.2.tar.gz
- cd zeromq-4.2.2/
- sudo ./configure --without-libsodium
- sudo make
- sudo make install
(6) protobuf安裝
- cd /usr/local/supporters
- wget https://github.com/google/protobuf/releases/download/v3.5.0/protobuf-cpp-3.5.0.tar.gz
- sudo tar xvf protobuf-cpp-3.5.0.tar.gz
- cd protobuf-3.5.0/
- sudo ./configure --prefix=/usr/local/supporters/config/protobuf
- sudo make
- sudo make install
配置變量:
vim /etc/profile
在文件中增加如下內容:
- export PROTOBUF_HOME=/usr/local/supporters/config/protobuf
- export PATH=$PATH:${PROTOBUF_HOME}/bin:${PROTOBUF_HOME}/lib/pkgconfig;
執行:source /etc/profile
查看安裝結果:
(7) pkg-config安裝
- cd /usr/local/supporters
- wget http://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz
- sudo tar xvf pkg-config-0.29.2.tar.gz
- cd pkg-config-0.29.2
- ./configure --prefix=/usr/local/supporters/config/pkg-config --with-internal-glib
- make
- make install
查看安裝結果:
(8) stf安裝
- npm config set unsafe-perm=true
- npm install -g stf
(9) Stf Doctor檢測STF
- cd /usr/local/node/node-linux-x64/lib/node_modules/stf/bin/
- ./stf doctor
上述圖片檢查,發現有個問題,解決方案:
sudo vim /etc/ld.so.conf
在文件裏添加:/usr/local/lib
運行:ldconfig
再次檢查環境:./stf doctor
(10) 啓動rethinkdb
先啓動rethinkdb,然後再使用stf local啓動平臺
- cd /usr/local/supporters/
- mkdir rethinkdb
- cd /usr/local/supporters/rethinkdb/
- rethinkdb --bind all --cache-size 8192 --http-port 8090 &
訪問rethinkdb: http://服務器IP:8090
(11) 啓動STF
cd /usr/local/node/node-linux-x64/lib/node_modules/stf/bin/
./stf local --public-ip 服務器IP --allow-remote --no-cleanup
啓動成功後,訪問stf: http://服務器IP:7100
輸入賬號密碼就可以登錄,密碼是郵件格式,不做校驗。
Docker搭建方式
(1)安裝docker
(2)拉取adb鏡像
拉取命令:docker pull sorccu/adb
啓動命令:docker run -di -v /dev/bus/usb:/dev/bus/usb --name=adbd --privileged --net host sorccu/adb:latest
(3)拉取rethinkdb鏡像
拉取命令:docker pull rethinkdb
啓動命令:sudo docker run -d --name rethinkdb -v /srv/rethinkdb:/data --net host rethinkdb rethinkdb --bind all --cache-size 8192 --http-port 8090
(4)拉取openstf/stf鏡像
拉取命令:docker pull openstf/stf
啓動命令:sudo docker run -d --name stf --net host openstf/stf stf local --public-ip 服務器IP --no-cleanup
--no-cleanup 這個參數很重要,之前部署安裝APP的時候,已經安裝好的APP,再stopusing後再連接,發現安裝好的APP不見了,加上這個參數就ok了
run stf的時候需要注意ip的填寫,虛擬機需要打開網絡橋接模式
常見問題:
啓動stf會自動安裝stf到手機,但依然不能控制手機。是因爲手機不會自動運行stf的服務器。執行以下命令即可(PS:執行以下命令,保證只有1臺設備,且是需要手工拉起stf服務的設備)
adb -s 設備id shell am start -n jp.co.cyberagent.stf/.IdentityActivity
adb -s 設備id shell am startservice -n jp.co.cyberagent.stf/.Service
Mac搭建STF(兼容IOS設備)
IOS設備要依賴WebDriverAgent(簡稱wda)實現端對端UI測試,WebDriverAgent 在 iOS 端實現了一個 WebDriver Server ,藉助這個 server 我們可以遠程控制 iOS 設備, 能同時支持模擬器和真機, 真機運行需要證書和描述文件,個人免費證書也可以,注意配置WebDriverAgentRunnerRunner工程就行。
參考巨人的文章實行搭建:https://testerhome.com/topics/19548
(1) 安裝brew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
(2) 安裝nodejs
brew install node -g
安裝下node版本管理工具n
brew install n
這裏node安裝兩個版本,一個最新版,一個是v8.14的版本,appium-doctor檢測適用於最新版node,stf適用於8.14的版本
n指定版本:sudo n 8.14
n切換版本:sudo n
(3) 安裝jdk
(4) 安裝android sdk
(5) 安裝stf依賴
- brew install rethinkdb graphicsmagick zeromq protobuf yasm pkg-config
(6) 安裝libimobiledevice等依賴工具
- brew install usbmuxd
- brew link usbmuxd
- brew install libimobiledevice
- brew install ideviceinstaller
- brew install carthage
- brew install socat
(7)下載WebDriverAgent源碼
git clone https://github.com/mrx1203/WebDriverAgent.git
(參考大神源碼,在此源碼基礎上調整安裝個人免費證書)
進入WebDriverAgent目錄,執行進行編譯安裝
- cd /usr/local/lib/node_modules/WebDriverAgent/
- ./Scripts/bootstrap.sh
編譯完畢,用Xcode打開WebDriverAgent.xcodeproj,電腦接入iOS設備(注意,這裏調試的都是系統版本爲13.2的)
由於蘋果對證書要求非常嚴格,必須在證書設備列表中設備才能安裝打包後的app.
可以使用公司蘋果開發者賬號,需要找開發同學加權限
可以使用個人免費開發者賬號
這裏安利個人免費安裝證書:
Xcode-----》Preferences-----》Accounts添加apple Id
PROJECT--->WebDriverAgent--->info
TAEGETS--->WebDriverAgentLib--->General
TAEGETS--->WebDriverAgentLib--->Signing & Capabilities
TAEGETS--->WebDriverAgentLib--->Build Settings
TAEGETS--->WebDriverAgentRunner--->Signing&Capblities
TAEGETS--->WebDriverAgentRunner--->BuildSettings
執行安裝證書
(1)Scheme 選擇WebDriverAgentRunner
(2)執行test
test成功後,會發現手機設備自動安裝上了一個WebDriverAgentRunner-Runner.app
在設置---》通用---》描述文件與設備管理 裏面信任這個證書
此時在瀏覽器可以正常打開http://192.168.96.14:8100/status
以上方式就是安裝個人免費證書的步驟了,當然也可以在終端通過命令執行安裝
進入根目錄,執行命令:
Xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=9251e39b63331e52538dc2cc122e72da3d652b41' test
設備ID:可以通過執行命令得到:idevices_id -l
(8) 下載Stf源碼
git clone https://github.com/mrx1203/stf.git
(參考大神的源碼,在此源碼基礎上優化)
執行npm install 自動安裝所需的插件
啓動rethinkdb:
- cd /usr/local/supporters/rethinkdb/
- rethinkdb --bind all --cache-size 8192 --http-port 8090 &
編譯stf源碼後,啓動stf
- cd /usr/local/lib/node_modules/stf/bin/
- ./stf local --public-ip 服務IP --allow-remote --no-cleanup --wda-path /usr/local/lib/node_modules/WebDriverAgent/ --wda-port 8100
因爲STF源碼中包括有自動xcodebuild證書安裝的部分,所以上面第三步必須測試成功後,再啓動stf
其中會遇到很多問題,見招拆招吧。
如果啓動stf遇到該問題ideviceinfo returned an error: Could not connect to lockdownd, error code -21
則嘗試這種方案解決:
sudo chmod -R 777 /var/db/lockdown
brew update
brew uninstall --ignore-dependencies libimobiledevice
brew uninstall --ignore-dependencies usbmuxd
brew install --HEAD usbmuxd
brew unlink usbmuxd
brew link usbmuxd
brew install --HEAD libimobiledevice
brew install ideviceinstaller
flutter doctor (檢測是否成功)
如果還是不行的話請重啓電腦後再執行flutter doctor命令檢測成功與否。