Android手機管理平台搭建:STF和atxserver2


STF(Smartphone Test Farm)是一個Android手機設備管理平台,通過在瀏覽器上遠程調試智能手機、手表和其它設備,一般用於遠程管理、調試、監控多個設備。atxserver2移動設備管理平台支持支持Android和iOS,它也使用到了STF。本文介紹如何使用兩個工具來搭建Android手機管理平台。

很多APP測試項目的實時屏幕投屏都使用到了stf項目,比如airtestuiautomator2等。STF使用openstf/minicap來捕獲屏幕實現實時投屏,至於對設備的各種操作使用openstf/minitouch來實現。

STF安裝配置流程

STF官網地址:https://openstf.io/

STF github項目地址:https://github.com/openstf/stf

下面介紹使用docker搭建STF手機管理平台方法。

本文搭建環境:

1、Win10+虛擬機Centos7.8

  • windows環境安裝Android sdk
  • 虛擬機IP地址:192.168.30.8;windows IP:192.168.30.100
  • Centos關閉防火牆,命令:systemctl stop firewalld
  • 虛擬機安裝docker
  • 虛擬機和物理機可以相互ping通

2、手機設備:真機(Android 10)2台

1. 拉取鏡像

如果沒有安裝docker,CentOS下的docker安裝方法可參考:容器技術介紹:Docker簡介及安裝

docker安裝完成后,拉取stf相關docker鏡像:

docker pull openstf/stf:latest
docker pull sorccu/adb:latest
docker pull rethinkdb:latest
docker pull openstf/ambassador:latest
docker pull nginx:latest

查看鏡像:

[root@server ~]# docker images | grep -E "stf|adb|rethinkdb"
rethinkdb            latest    3f37e5daf5bd   2 months ago    131MB
openstf/ambassador   latest    938a816f078a   11 months ago   8.63MB
openstf/stf          latest    91d0ab894aff   11 months ago   958MB
sorccu/adb           latest    7123ee61b746   3 years ago     30.5MB

2. 連接設備

PC使用USB方式連接真機:

$ adb devices
List of devices attached
CUYDU19626004019        device
SNHVB20C18002195        device

開啟adb遠程端口:

$ adb nodaemon server -a -P 5037

3. 啟動stf相關容器服務

啟動rethinkdb數據庫,主要用於存儲連接設備信息

$ docker run --restart=always -d --name rethinkdb --net host -v /srv/rethinkdb:/data rethinkdb rethinkdb --bind all --cache-size 8192 --http-port 8090
  • --net:網絡模式選擇主機模式
  • -v:把容器中的目錄掛載到宿主機的目錄上

啟動adb service

$ docker run --restart=always -d --name=adbd --privileged --net=host -v /dev/bus/usb:/dev/bus/usb sorccu/adb:latest
  • --privileged:使容器獲取宿主機的root權限

啟動stf

docker run --privileged -d --name=stf --net=host openstf/stf:latest stf local --public-ip 192.168.30.8 --adb-host 192.168.30.100 --adb-port 5037 --allow-remote
  • --allow-remote:允許遠程調試
  • --public-ip:搭建STF服務的主機IP,用於遠程訪問,如果是本地訪問可以不加。
  • --adb-host:windows的IP地址
  • --adb-port:adb暴露的端口號

查看三個鏡像啟動情況:

[root@server ~]# docker ps
CONTAINER ID   IMAGE                COMMAND                  CREATED         STATUS         PORTS      NAMES
96cece4b9772   openstf/stf:latest   "stf local --public-…"   6 minutes ago   Up 6 minutes              stf
b8121a631095   sorccu/adb:latest    "/sbin/tini -- adb -…"   7 hours ago     Up 7 hours                adbd
48f6b9d15282   rethinkdb            "rethinkdb --bind al…"   7 hours ago     Up 7 hours                rethinkdb

4. STF手機管理

瀏覽器訪問:http://192.168.20.9:7100/auth/mock/

填寫賬號和郵箱,可以填寫任意用戶名和郵箱,登錄后就可以看到設備了,可以對設備進行各種操作。

其它說明

本文的搭建環境為物理機+虛擬機,STF一般用於管理多台設備,這種情況下需要使用master+slave模式,將多個slave的設備連接到master上,只需要在master安裝STF環境,slave連接手機就可以了。

STF常見問題

1. 連接網易mumu模擬器

網易mumu模擬器可能連接不成功,安裝一下STFService.apk,然后開啟模擬器STFService的activity,並啟動服務。

STF連接時會在android設備上自動安裝STFService.apk,如果沒有,可以手動安裝。STFService.apk項目地址:https://github.com/openstf/STFService.apk

apk下載:https://github.com/openstf/STFService.apk/releases/tag/v2.4.3

adb -s 127.0.0.1:7555 uninstall jp.co.cyberagent.stf 
adb -s 127.0.0.1:7555 install STFService.apk
adb -s 127.0.0.1:7555 shell am start -n jp.co.cyberagent.stf/.IdentityActivity
adb -s 127.0.0.1:7555 shell am startservice -n jp.co.cyberagent.stf/.Service

2. 開啟adb遠程端口失敗

開啟adb遠程端口時出現如下報錯:

$ adb nodaemon server -a -P 5037
error: could not install *smartsocket* listener: cannot bind to 0.0.0.0:5037: 通常每個套接字地址(協議/網絡地址/端口)只允許使用一次。 (10048)

解決方法:殺掉占用端口的進程后重新開啟

一般是adb進程占用,可先把adb殺掉,開啟adb遠程端口后重新開啟adb。

查詢5037端口占用:

$ netstat -ano | findstr 5037 
TCP    0.0.0.0:5037           0.0.0.0:0              LISTENING       34212

找到對應進程(也可以在任務管理器中查看):

$ tasklist | findstr 34212
adb.exe                      34212 Console                    1     10,692 K

通過PID或者進程名殺死進程:

$ taskkill -pid 34212 -f -t # taskkill /pid 34212 /f /t
$ taskkill -f -im adb.exe # taskkill /f /im adb.exe

atxserver2配置

atxserver2移動設備管理平台支持Android和iOS

下面介紹Android設備上線方法。

1. docker部署

Clone代碼到本地(虛擬機上):

$ git clone https://github.com/openatx/atxserver2.git

docker-compose部署:

$ cd atxserver2
$ docker-compose up

如果報如下錯誤:

[root@server atxserver2]# docker-compose up
Creating network "atxserver2_default" with the default driver
ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i br-9e93ad4ad714 -j RETURN: iptables: No chain/target/match by that name.
 (exit status 1))

跟關閉防火牆有關,重啟docker即可:

$ service docker restart

執行docker-compose up命令后會下載需要的鏡像並啟動服務

Creating atxserver2_rethinkdb_1 ... done
Creating atxserver2_web_1       ... done
Attaching to atxserver2_rethinkdb_1, atxserver2_web_1
rethinkdb_1  | Recursively removing directory /data/rethinkdb_data/tmp
rethinkdb_1  | Initializing directory /data/rethinkdb_data
rethinkdb_1  | Running rethinkdb 2.3.6~0jessie (GCC 4.9.2)...
rethinkdb_1  | Running on Linux 3.10.0-1062.el7.x86_64 x86_64
rethinkdb_1  | Loading data from directory /data/rethinkdb_data
rethinkdb_1  | warn: Cache size does not leave much memory for server and query overhead (available memory: 846 MB).
rethinkdb_1  | warn: Cache size is very low and may impact performance.
rethinkdb_1  | Listening for intracluster connections on port 29015
rethinkdb_1  | Listening for client driver connections on port 28015
rethinkdb_1  | Listening for administrative HTTP connections on port 8080
rethinkdb_1  | Listening on cluster addresses: 127.0.0.1, 172.20.0.2
rethinkdb_1  | Listening on driver addresses: 127.0.0.1, 172.20.0.2
rethinkdb_1  | Listening on http addresses: 127.0.0.1, 172.20.0.2
rethinkdb_1  | Server ready, "8969b4cc0c37_cpy" 2994c73a-01ff-41fb-bba2-6211e3915c04
web_1        | RethinkDB is running
rethinkdb_1  | A newer version of the RethinkDB server is available: 2.4.0. You can read the changelog at <https://github.com/rethinkdb/rethinkdb/releases>.
web_1        | Namespace(auth='simple', auth_conf_file=None, debug=False, no_xheaders=False, port=4000)
web_1        | [I 210724 11:45:58 main:70] listen on port http://172.20.0.3:4000

也可以后台啟動atxserver2:

docker-compose up -d

瀏覽器訪問:http://192.168.30.8:4000/ , 隨便輸入一個用戶名,點擊【Sign in】

2. 安裝atxserver2-android-provider

需要使用到項目 atxserver2-android-provider

在windows上安裝:

安裝NodeJS 8,Python3.6+

將代碼clone到本地:

$ git clone https://github.com/openatx/atxserver2-android-provider

安裝依賴:

$ cd atxserver2-android-provider
$ npm install

創建一個Python虛擬環境

$ python3 -m venv venv
$ cd ./venv/Scripts/
$ activate

回到atxserver2-android-provider目錄下,安裝相關Python庫:

$ pip install -r requirements.txt

3. 啟動atxserver2-android-provider

指定atxserver2的地址為 http://192.168.30.8:4000

$ python3 main.py --server http://192.168.30.8:4000 --allow-remote
[I 210724 21:52:18 main:299] Owner: None
[I 210724 21:52:18 main:315] ProviderURL: http://192.168.30.100:3500
>>> app-uiautomator.apk verison: 2.3.3
>>> app-uiautomator-test.apk verison: 2.3.3
[D 210724 21:52:20 fetching:121] download from mirror error, use origin source
Downloading stf-binaries-0.3.0.zip 5070820 / -1 [Done]
[I 210724 21:52:27 heartbeat:139] WS receive: {"success": true, "id": "6194480c-ec86-11eb-ba84-0242ac140003"}
[I 210724 21:52:29 asyncadb:121] adb connection is down, retry after 1.0s
* daemon not running; starting now at tcp:5037
* daemon started successfully
[I 210724 21:52:35 asyncadb:125] adb-server started, version: 40
[D 210724 21:52:35 main:234] DeviceEvent(present=True, serial='CUYDU19626004019', status='device')
[I 210724 21:52:35 device:57] Init device: CUYDU19626004019
[D 210724 21:52:35 device:85] [CUYDU19626004019] sdk: 29, abi: arm64-v8a, abis: ['arm64-v8a', 'armeabi-v7a', 'armeabi']
[D 210724 21:52:35 device:132] [CUYDU19626004019] already pushed stf-binaries-0.3.0/node_modules/@devicefarmer/minicap-prebuilt/prebuilt/arm64-v8a/lib/android-29/minicap.so
[D 210724 21:52:35 device:132] [CUYDU19626004019] already pushed stf-binaries-0.3.0/node_modules/@devicefarmer/minicap-prebuilt/prebuilt/arm64-v8a/bin/minicap
[D 210724 21:52:35 device:113] [CUYDU19626004019] use atx-agent: atx-agent-armv7
[D 210724 21:52:35 device:132] [CUYDU19626004019] already pushed atx-agent-armv7
None : 4 1.0
[D 210724 21:52:35 device:154] [CUYDU19626004019] install vendor/WhatsInput-1.0.apk

啟動時會自動給手機安裝minicap, minitouch, atx-agent, app-uiautomator-test.apk, whatsinput-apk

--THE END--

歡迎關注公眾號:「測試開發小記」及時接收最新技術文章!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM