zoukankan      html  css  js  c++  java
  • 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--

    欢迎关注公众号:「测试开发小记」及时接收最新技术文章!

  • 相关阅读:
    PAT (Advanced Level) Practice 1055 The World's Richest (25 分) (结构体排序)
    PAT (Advanced Level) Practice 1036 Boys vs Girls (25 分)
    PAT (Advanced Level) Practice 1028 List Sorting (25 分) (自定义排序)
    PAT (Advanced Level) Practice 1035 Password (20 分)
    PAT (Advanced Level) Practice 1019 General Palindromic Number (20 分) (进制转换,回文数)
    PAT (Advanced Level) Practice 1120 Friend Numbers (20 分) (set)
    从零开始吧
    Python GUI编程(TKinter)(简易计算器)
    PAT 基础编程题目集 6-7 统计某类完全平方数 (20 分)
    PAT (Advanced Level) Practice 1152 Google Recruitment (20 分)
  • 原文地址:https://www.cnblogs.com/hiyong/p/15091714.html
Copyright © 2011-2022 走看看