在Centos和Docker上安装STF 遇到的若干问题总结

1. 概述

刚开始接触 STF 是看了testhome上思寒讲的关于Appium的一些教程,知道了远程管理设备这回事,本身也在使用Appium框架作App自动化测试,已经经过集成到了jenkins服务器上,因为服务器不在不在本身工位上,每次查看手机状态或者想看下运行状况,就要跑到服务器所在的位置查看,非常麻烦,因而本身想着也搭建一台STF服务器,远程管理设备。网上这方面的教程不少,也有关于各类坑的解决办法,整体安装下来没有想象的那么复杂,但也卡在了很多小问题上,特别是防火墙和权限的问题。建议刚接触STF 的同窗先从安装,可以正常使用起来开始,而后慢慢拓展,好比二次改造,制做Docker镜像。php

2. 直接在Centos中安装STF环境

2.1 安装篇

网上不少此类的安装文档,可参考如下几篇,非常详细
centos7下stf安装介绍(一)—-环境搭建
Centos 搭建STF
SDK环境配置1
SDK环境配置2html

2.2 遇到的问题

  1. 安装完成后,远程不能访问
    关闭 Centos 防火墙java

  2. 可远程访问STF,登陆可显示链接的设备。但点进去设备却不能显示界面,以下图:android

    这里写图片描述

Centos 防火墙未关闭引发的,不止是7100,还有其余许多端口和外界访问。建议关闭centos防火墙。nginx

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 serviceweb

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

再启动stfdocker

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

必定要注意启动顺序,STF 依赖 rethinkdb,因此要先启动 rethinkdb,启动完成后使用: docker ps -a 查看是否启动成功
这里写图片描述数据库

3.2 遇到的问题

若是未成功启动,多是权限问题,加 –privileged=true 便可。
启动 rethinkdbubuntu

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

启动STF windows

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地址 通常都能解决。。。