应用场景
开始了解stf主要源自于当前移动端自动化过程中,发现执行机器上挂载的移动设备监控起来比较麻烦,有时候报错或调试需要跑到执行机所在的位置查看运行情况。
有没有一种办法可以直接在自己位置上就能看到手机的运行情况呢?于是就在领导的指引下调研了一下该工具。
但其实这款工具还可以帮助解决公司内部移动设备资源不能充分利用的问题,如:
公司移动设备其实是有限的,有的人借走了用完未及时归还,导致其他人就无法使用,而使用这款工具就可以统一监控公司的所有移动设备资源,使用者可在浏览器界面上查看哪些设备是空闲状态,在页面上就可以操作对应设备。
本文案例环境配置
windows上通过VMware安装虚拟机CentOS7,然后安装docker,使用docker方式搭建。
CentOS如何搭建不在本文范围。
注意:windows系统不建议直接用docker的toolbox版本,会有很多问题。
Docker安装
官方文档:https://docs.docker.com/engine/install/centos/
以下docker安装操作均来自官方:
1. 卸载旧版本
yum remove docker \
2. 安装要用到的仓库
yum install -y yum-utils # 配置仓库(后续下载镜像的地址) 默认下载的地址是国外的(https://download.docker.com/linux/centos/docker-ce.repo ),可以换成阿里云的更快一些 yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3. 安装docker相关的东西
#更新yum索引 yum makecache fast #安装docker引擎 yum install docker-ce docker-ce-cli containerd.io
注:安装过程中会出现两次让你输入y/n的地方,我选的y,然后就继续下载一些东西。
4. 启动docker
systemctl start docker # 使用该命令查看是否安装成功 docker version # 运行官方的hello-world docker run hello-world # 查看hello-world是否启动成功 docker ps
上述环境都准备好以后,下面开始docker搭建openStf。
明确openStf连接设备的2种方式:
·一种是本文采用的方式:主节点部署STF服务并允许远程访问API,子节点只需部署ADB,保证ADB 5037端口对外暴露即可。
这种方案的优点是部署简单,而且子节点无需部署STF服务;缺点就是子节点新增机器需要在主节点重新运行STF命令以识别子节点上新增的机器。
·还有一种是主节点和子节点都部署STF服务并允许远程访问API,然后主节点连接子节点。
这种方案的优点是子节点新增设备可以自动识别;缺点就是子节点也需要部署STF服务。
开始搭建
拉取镜像
docker pull openstf/stf:latest //stf镜像 docker pull sorccu/adb:latest //adb镜像 docker pull rethinkdb:latest //rethinkdb镜像
启动镜像
docker run -d --name rethinkdb -v /srv/rethinkdb:/data --net host rethinkdb rethinkdb --bind all --cache-size 8192 --http-port 8090 docker run -d --name adbd --privileged -v /dev/bus/usb:/dev/bus/usb --net host sorccu/adb:latest //启动stf,注意ip[192.168.20.130]是stf对应服务器ip docker run -d --name stf --net host openstf/stf stf local --public-ip 192.168.20.130
查看启动成功后的镜像:
docker ps
访问stf
启动上述镜像后用windows直接访问http://192.168.20.130:7100访问不到,但不一定其他人的环境也访问不到,如图:
此时,需要放开7100端口:
//查询7100是否放开 firewall-cmd --query -port=7100/tcp
//放开7100端口,并重新加载 [root@second ~]# firewall-cmd --permanent --zone=public --add-port=7100/tcp success [root@second ~]# firewall-cmd --reload success
上述端口问题解决后,再次访问 http://192.168.20.130:7100,可以成功打开页面。
随意输入名称、邮箱登录。
注意:此时连接上还不能正常使用,页面一直断断续续报Disconnected,实际上是没有连接上的。
手机连接windows电脑
提示:
如果是在该电脑上装的虚拟机,连接的时候注意选择连接到windows电脑,而不是虚拟机上
手机打开开发者调试模式
命令操作
cmd中adb命令查看是否连接成功:
adb devices
对外暴露5037端口:
adb nodaemon server -a -P 5037 //当提示端口被占用时需要杀掉占用的进程
taskkill /pid 7808/f
centos上进入docker内部执行如下操作:
//通过下面的命令查看stf容器id docker ps //进入stf容器内部,标红部分为正在运行中的stf容器id docker exec -it 570a1d6addc6 /bin/sh //执行如下命令,标红部分的ip为stf所在服务ip,通过ifconfig可以查看 stf local --public-ip 192.168.20.130 --allow-remote
//通过adb host加载windows主机上的设备 stf provider --name second --min-port 7400 --max-port 7700 --connect-sub tcp://127.0.0.1:7114 --connect-push tcp://127.0.0.1:7116 --group-timeout 900 --public-ip 192.168.20.130 --storage-url http://localhost:7100/ --adb-host 192.168.1.4 --adb-port 5037 --vnc-initial-size 600x800 --mute-master never --allow-remote
再次访问stf,如下图手机已显示在stf上。
点击设备进去会出现如下问题:
http://www.360doc.com/content/20/0120/13/8189294_887148015.shtml
经再三验证,确实还是需要关闭防火墙才行,直接在centos里访问stf点击设备进入是没有问题的,说明还是有些网络上的问题。
当把防火墙关闭后,windows上访问就ok了。
通过这样的方式,我们在开发或调试移动端自动脚本时就不必要一直跑到执行机对应的位置查看手机运行情况了,直接打开上述界面即可看到app的运行情况。
截至此stf的docker上搭建方式就已经结束了。
由于浏览器上查看的时候有时会断开连接,为了确保连接的稳定性还需要考虑的问题:
centos上进入stf容器内部,通过adb host连接子节点上的设备,一旦退出容器后好像就断掉连接了,这该怎样解决?
当再多一个子节点连接设备时,该怎样同时保证连所有子节点上的设备呢?命令怎么写的?
因为docker建立在linux系统之上的,docker与宿主机与电脑是怎样的关系?
linux命令需要多了解、练习.网络方面的知识等都需要有基本的认识,这样在出现问题时知道从哪排查?
作者:月亮