在Centos和Docker上安裝STF 遇到的若干問題總結

Cara69發表於2018-04-11

1. 概述

剛開始接觸 STF 是看了testhome上思寒講的關於Appium的一些教程,知道了遠端管理裝置這回事,自己也在使用Appium框架做App自動化測試,已經通過整合到了jenkins伺服器上,由於伺服器不在不在自己工位上,每次檢視手機狀態或者想看下執行情況,就要跑到伺服器所在的位置檢視,很是麻煩,於是自己想著也搭建一臺STF伺服器,遠端管理裝置。網上這方面的教程很多,也有關於各種坑的解決辦法,總體安裝下來沒有想象的那麼複雜,但也卡在了不少小問題上,特別是防火牆和許可權的問題。建議剛接觸STF 的同學先從安裝,能夠正常使用起來開始,然後慢慢擴充,比如二次改造,製作Docker映象。

2. 直接在Centos中安裝STF環境

2.1 安裝篇

網上很多此類的安裝文件,可參考以下幾篇,很是詳細
centos7下stf安裝介紹(一)—-環境搭建
Centos 搭建STF
SDK環境配置1
SDK環境配置2

2.2 遇到的問題

  1. 安裝完成後,遠端不能訪問
    關閉 Centos 防火牆

  2. 可遠端訪問STF,登入可顯示連線的裝置。但點進去裝置卻不能顯示介面,如下圖:

    這裡寫圖片描述

Centos 防火牆未關閉引起的,不止是7100,還有其他許多埠和外界訪問。建議關閉centos防火牆。

3. 使用Docker映象安裝

3.1 安裝步驟

  1. 在centos上安裝Docker,很簡單,直接 yum install docker 即可
  2. 開啟docker服務
    在centos中開啟服務可以使用systemctl start serviceName.service,比如開啟docker,systemctl start docker.service
  3. 拉取docker映象檔案
    使用docker安裝 STF 很簡單,只需拉取以下5個映象即可:
    docker pull openstf/stf:latest
    docker pull sorccu/adb:latest
    docker pull rethinkdb:latest
    docker pull openstf/ambassador:latest
    docker pull nginx:latest
  4. 啟動容器
    先啟動一個資料庫
docker run -d --name rethinkdb -v /srv/rethinkdb:/data --net host rethinkdb rethinkdb --bind all --cache-size 8192 --http-port 8090

再啟動adb service

docker run -d --name adbd --privileged -v /dev/bus/usb:/dev/bus/usb --net host sorccu/adb:latest

再啟動stf

docker run -d --name stf --net host openstf/stf stf local --public-ip 宿主機IP地址

一定要注意啟動順序,STF 依賴 rethinkdb,所以要先啟動 rethinkdb,啟動完成後使用: docker ps -a 檢視是否啟動成功
這裡寫圖片描述

3.2 遇到的問題

如果未成功啟動,可能是許可權問題,加 –privileged=true 即可。
啟動 rethinkdb

docker run -d --name rethinkdb --privileged=true -v /srv/rethinkdb:/data --net host rethinkdb rethinkdb --bind all --cache-size 2048 --http-port 8090

啟動STF

docker run -d provider --name stf --privileged=true --net host openstf/stf stf local --public-ip 192.168.116.128

4. 連線未安裝STF 的電腦上的裝置

首先保證其他電腦可以和安裝STF 的系統通訊,在未安裝STF 的電腦上暴露adb埠,建議採用預設埠:5037,

adb -a -P 5037 fork-server server

這裡寫圖片描述
如果出現以下錯誤:

這裡寫圖片描述
在工作管理員中關掉adb.exe,重新執行上述命令。
如果出現下面報錯,建議換成低版本adb

reply fd for adb server to client communication not specified.

或者使用命令:adb nodaemon server -a
這裡寫圖片描述
在docker中刪除原來的stf映象,重新執行(15.2.23.38 是宿主機IP,5037 是宿主機暴露的adb埠):

docker run -d --name stf --privileged=true --net host openstf/stf stf local --public-ip 15.2.23.203 --adb-host 15.2.23.38 --adb-port 5037  --allow-remote

更詳細教程可參考:stf使用經驗--在windows平臺連線Mac上stf的過程

5. 備註:過程中可能用到的一些命令以及可能遇到的問題

1 docker start 容器名 啟動某個容器
2 docker stop 容器名 停止某個容器
3 docker rm 容器名 刪除某個容器
4 sudo ufw status 檢視ubuntu的防火牆狀態
5 過程中可能會無法ping虛擬機器,改成橋接。同時關閉掉機器的防火牆(這個看自己,或者自己加規則,准許哪些IP訪問)。
還不可以的話,配置一個跟主機相同IP段的IP地址
一般都能解決。。。

相關文章