• 11
  • 11
分享
  • 如何在CentOS7下通过Docker方式搭建OpenStf环境?
  • 曼倩诙谐 2021-06-24 10:44:42 字数 3536 阅读 1443 收藏 11

  应用场景

  开始了解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

2-1.png

  访问stf

  启动上述镜像后用windows直接访问http://192.168.20.130:7100访问不到,但不一定其他人的环境也访问不到,如图:

2-2-.png

  此时,需要放开7100端口:

//查询7100是否放开
firewall-cmd --query -port=7100/tcp

2-3.png

//放开7100端口,并重新加载
[root@second ~]# firewall-cmd --permanent --zone=public --add-port=7100/tcp
success
[root@second ~]# firewall-cmd --reload
success

2-4.png

  上述端口问题解决后,再次访问 http://192.168.20.130:7100,可以成功打开页面。

2-5.png

  随意输入名称、邮箱登录。

  注意:此时连接上还不能正常使用,页面一直断断续续报Disconnected,实际上是没有连接上的。

2-6.png

  手机连接windows电脑

  提示:

  • 如果是在该电脑上装的虚拟机,连接的时候注意选择连接到windows电脑,而不是虚拟机上

  • 手机打开开发者调试模式

  命令操作

  cmd中adb命令查看是否连接成功:

  adb devices

  对外暴露5037端口:

adb nodaemon server -a -P 5037  //当提示端口被占用时需要杀掉占用的进程

2-7.png

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

2-8.png

//通过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

2-9.png

  再次访问stf,如下图手机已显示在stf上。

2-10.png

  点击设备进去会出现如下问题:

  http://www.360doc.com/content/20/0120/13/8189294_887148015.shtml

  经再三验证,确实还是需要关闭防火墙才行,直接在centos里访问stf点击设备进入是没有问题的,说明还是有些网络上的问题。

  当把防火墙关闭后,windows上访问就ok了。

2-11.png

  通过这样的方式,我们在开发或调试移动端自动脚本时就不必要一直跑到执行机对应的位置查看手机运行情况了,直接打开上述界面即可看到app的运行情况。

  截至此stf的docker上搭建方式就已经结束了。

  由于浏览器上查看的时候有时会断开连接,为了确保连接的稳定性还需要考虑的问题:

  centos上进入stf容器内部,通过adb host连接子节点上的设备,一旦退出容器后好像就断掉连接了,这该怎样解决?

  当再多一个子节点连接设备时,该怎样同时保证连所有子节点上的设备呢?命令怎么写的?

  因为docker建立在linux系统之上的,docker与宿主机与电脑是怎样的关系?

  linux命令需要多了解、练习.网络方面的知识等都需要有基本的认识,这样在出现问题时知道从哪排查?


作者:月亮   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 1、 强制等待时间 sleep()必须import time包,强制等待生效时间=页面跳转时间+sleep()设置休眠时间强制等待时间使用语法:sleep(s) s表示时间,以秒为单位 例:sleep(2) 休眠3s2、显示等待时间 WebDriverWait()必须导入WebDriverWait包才可以使用,显示等待时间是针对单个元素生效的,当在规定时间内找到了对应元素,则执行下一步操作。显示等待时间使用语法:WebDriverWait(x,y,z).until(lambda x:x.find_element_by_元素定位方法("对应元素方法的值"))x表示网页窗口对象...
            0 0 810
            分享
          •   众所周知,与其他传感器相比,自动驾驶汽车AV摄像头拥有最密集的信息,使其成为自动驾驶汽车中提取信息最具挑战性的传感器之一,但同时也是最有用的。为了从数学上理解这一点,需要首先看一下每个可视化数据点数量,如下图所示。实际上,视觉感知算法是将这些数据点(浮点数)作为传感器覆盖 360°视图的感知算法输入,负责为 AV 做出决策。  基于视觉的3D检测任务是自动驾驶系统感知的基础任务,也是自动驾驶当前研究的热点。然而,使用单目相机的 2D 传感器输入数据实现 3D BEV(鸟瞰图)性能并不是一件容易的事。在本文中,重点关注自动驾驶中基于3D 视觉检测的方法。基于不同视觉BEV 算法检测进行了详细...
            0 0 288
            分享
          •   项目背景  公司内部的软件采用B/S架构,目的是进行实验室的数据存储、分析、管理。大部分是数据的增删改查,但是由于还在开发阶段,所以UI的变化非常快,难以针对UI进行自动化测试,那样会消耗大量的精力与时间维护自动化脚本,对于小团队来说就得不偿失了。针对此种情况,选用接口测试较为有效。  工具选择  针对接口测试的自动化工具也很多,例如Soup UI、Postman、robotframework,甚至jmeter这样的性能测试工具都可以进行接口测试。  robot framework测试框架有很多的第三方库可以使用,采用的是填表的方式进行,较容易上手,但是无法深入底层的了解客户端与服务器的交...
            2 3 3329
            分享
          •   在业务系统逻辑实现中,经常涉及异步执行、异步更新场景的开发和使用。但在性能测试中,经常会出现因为异步逻辑设计不合理引发的不可预知问题,比如在开发验证时一切正常,测试人员在性能测试时偶发报错。  本文从Spring事务、业务逻辑顺序、数据库死锁等方面介绍在项目研发中遇到的几种异常场景供读者学习。  一、事务延迟提交引发的异步执行偶发问题分析和设计思考。  1、场景说明:当前有两个线程A、B,A是生产者,B是消费者,A、B两个线程异步执行,A每次从队列获取n条待处理任务,然后依次处理每条任务,包括业务逻辑处理、远程过程调用、更新数据库、将任务放入消费者队列,B从消费队列获取任务进行处理。  2...
            0 0 983
            分享
          •   出现迷茫或焦虑的原因是什么?  也许每个人的原因不一样,但不外乎是下面这些原因叠加的结果。  1、敏捷和DevOps开发模式的推行,虽然20年的历史是否已经证明“敏捷已经失败了” 暂且不管,但敏捷/DevOps之风刮的还是很厉害,开发和测试越来越融合,一些头部企业正在取消“测试工程师”这样的岗位,从国外的微软到国内的腾讯,而不少企业也在不断追求越来越高的开发测试比,或者现在只招“测试开发工程师”。  2、测试的天花板比较低,自己上升的空间比较小,在职位上升通道上,测试工程师很难成为研发部门负责人、研发总监、研发VP、CTO等;虽然有些公司专门也为测试人员设置了专家、高级专家、架构师这样的岗...
            0 0 1309
            分享
      • 51testing软件测试圈微信