通过docker的方式搭建OpenSTF避免了手动安装时需要处理的繁多依赖关系!
一.这里需要记录下我部署时的疑惑点
①ifconfig command not found
检查yum是否安装
输入命令:ip addr,观察是否分配了IP地址(下图为未分配的情况,需要修改网卡自启动)
检查配置/etc/resolv.conf是否配置,未配置则按如下方式配置:
search localdomain
nameserver 8.8.8.8
#######
nameserver 114.114.114.114(这是国内的dns服务器系统,还是比较好用的。谷歌的可以使用8.8.8.8)
检查配置/etc/sysconfig/network-scripts/ifcfg-ens33,并修改网卡自启动
ONBOOT=yes
输入命令:yum install net-tools
②docker部署完成后,容器的启动顺序一定要是最后启动stf
③部署完毕,stf、adbd、rethinkdb都已启动,但是管理界面显示设备为准备中?
服务器端使用命令:docker logs stf 查看stf日志
这里需要将手机中的STFService.apk重新安装,即可
二.环境部署
1.docker安装---安装软件包
2.docker安装---设置稳定的仓库
3.docker安装---列出并排序存储库中可用的docker版本
4.docker安装---通过其完整的软件包名称安装特定版本
5.docker安装---启动docker
6.docker安装---验证是否正确安装了docker
7.docker安装---查看当前docker的版本信息
9.拉取openstf镜像
10.拉取adb镜像
11.拉取ambassador镜像
12.拉取rethinkdb数据库镜像
13.拉取nginx镜像
14.查看所有镜像
15.启动数据库
docker run -d --name rethinkdb -v /srv/rethinkdb:/data --net host rethinkdb rethinkdb --bind all --cache-size 8192 --http-port 8090
16.启动adb service
docker run -d --name adbd --privileged -v /dev/bus/usb:/dev/bus/usb/ --net host sorccu/adb:latest
17.启动stf
docker run -d --name stf --net host openstf/stf stf local --public-ip 192.168.163.129
18.查看已启动的容器
19.查看所有容器
20.查看防火墙状态
21.临时关闭防火墙,reboot后失效
22.临时打开防火墙,reboot后失效
23.永久关闭防火墙,reboot后生效
24.永久开启防火墙,reboot后生效
25.docker中删除镜像
26.浏览器登录http://192.168.163.129:7100/auth/mock/进入管理登录界面
27.登录任意用户名进入管理界面
三.将上面环境部署整合成了脚本
1.deploystf.sh:一件部署openstf
#!/bin/bash
#IP
IP=`ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print$2}' | awk -F "/" '{print $1}'`
echo $IP
#docker安装-安装软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
#docker安装-设置稳定的仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#docker安装---列出并排序存储库中可用的docker版本
yum list docker-ce --showduplicates | sort -r
#docker安装---通过其完整的软件包名称安装特定版本
echo "Please enter the version number of docker(e.g. 19.03.5):"
read version
echo "准备安装docker.........."
yum install docker-ce-$version docker-ce-cli-$version containerd.io
echo "docker安装完毕.........."
#docker安装---查看当前docker的版本信息
echo "---------- docker versionInfo ----------"
docker version
echo "----------//dockerversionInfo ----------"
#docker安装---启动docker
systemctl start docker
echo "docker已启动.........."
#拉取openstf镜像
echo "拉取openstf镜像......"
docker pull openstf/stf:latest
#拉取adb镜像
echo "拉取adb镜像......."
docker pull sorccu/adb:latest
#拉取ambassador镜像
echo "拉取ambassador镜像......."
docker pull openstf/ambassador:latest
#拉取rethinkdb数据库镜像
echo "拉取rethinkdb数据库镜像......."
docker pull rethinkdb:latest
#拉取nginx镜像
echo "拉取nginx镜像........"
docker pull nginx:latest
#启动数据库
echo "正在启动数据库......"
docker run -d --name rethinkdb -v /srv/rethinkdb:/data --net host rethinkdb rethinkdb --bind all --cache-size 8192 --http-port 8090
echo "数据库启动完成......."
#启动adb service
echo "正在启动adb......."
docker run -d --name adbd --privileged -v /dev/bus/usb:/dev/bus/usb/ --net host sorccu/adb:latest
echo "adb启动完成......."
#启动stf
echo "正在启动stf......."
docker run -d --name stf --net host openstf/stf stf local --public-ip $IP
echo "stf启动完成......."
2.startstf.sh:快速启动脚本
#!/bin/bash
echo "`docker start adbd`已启动......."
echo "`docker start rethinkdb`已启动......."
echo "`docker start stf`已启动......."
# 展示已启动的容器
docker ps
3.虚拟机的端口映射
①由于目前是在虚拟机中搭建的环境,必须允许局域网其它设备连入
②虚拟机->编辑->虚拟机网络编辑
③NAT模式->NAT设置
④点击添加即可添加端口映射
***这里只需将宿主机7100端口映射入虚拟机7100端口即可
⑤其它局域网设备可以通过地址:http://宿主机地址:7100/auth/mock/进入管理登录界面
在Centos和Docker上安装STF 遇到的若干问题总结
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 遇到的问题
安装完成后,远程不能访问
关闭 Centos 防火墙
可远程访问STF,登录可显示连接的设备。但点进去设备却不能显示界面,如下图:
Centos 防火墙未关闭引起的,不止是7100,还有其他许多端口和外界访问。建议关闭centos防火墙。
3. 使用Docker镜像安装
3.1 安装步骤
在centos上安装Docker,很简单,直接 yum install docker 即可
开启docker服务
在centos中开启服务可以使用systemctl start serviceName.service,比如开启docker,systemctl start docker.service
拉取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
启动容器
先启动一个数据库
docker run -d --name rethinkdb -v /srv/rethinkdb:/data --net host rethinkdb rethinkdb --bind all --cache-size 8192 --http-port 8090
1
再启动adb service
docker run -d --name adbd --privileged -v /dev/bus/usb:/dev/bus/usb --net host sorccu/adb:latest
1
再启动stf
docker run -d --name stf --net host openstf/stf stf local --public-ip 宿主机IP地址
1
一定要注意启动顺序,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
1
启动STF
docker run -d provider --name stf --privileged=true --net host openstf/stf stf local --public-ip 192.168.116.128
1
4. 连接未安装STF 的电脑上的设备
首先保证其他电脑可以和安装STF 的系统通信,在未安装STF 的电脑上暴露adb端口,建议采用默认端口:5037,
adb -a -P 5037 fork-server server
1
如果出现以下错误:
在任务管理器中关掉adb.exe,重新运行上述命令。
如果出现下面报错,建议换成低版本adb
reply fd for adb server to client communication not specified.
1
或者使用命令: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
1
更详细教程可参考:stf使用经验--在windows平台连接Mac上stf的过程
5. 备注:过程中可能用到的一些命令以及可能遇到的问题
1 docker start 容器名 启动某个容器
2 docker stop 容器名 停止某个容器
3 docker rm 容器名 删除某个容器
4 sudo ufw status 查看ubuntu的防火墙状态
5 过程中可能会无法ping虚拟机,改成桥接。同时关闭掉机器的防火墙(这个看自己,或者自己加规则,准许哪些IP访问)。
还不可以的话,配置一个跟主机相同IP段的IP地址
一般都能解决。。。
————————————————