当前位置: 首页 > 工具软件 > STF > 使用案例 >

部署STF

微生毅
2023-12-01

CentOS系统,

首先安装python3.6

Step1.安装相关依赖包。

在终端下输入命令:sudoyum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

在终端下输入命令:wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz

Step3.解压安装包。(1)新建文件夹名字为python3,在终端下输入命令:mkdir python3

(2)将下载好的安装包解压至python3文件夹。

在终端下输入命令:tar -xf Python-3.6.5.tar.xz -C python3

Step4.编译安装。(1)进入 Python-3.6.5目录,在终端中输入命令:cd python3/Python-3.6.5

(2)配置安装路径,在终端中输入命令:./configure --prefix=/home/python3

(3)安装,在终端中输入命令:make

之后,再输入命令:make install

Step5.创建python3的软链接。

(1)备份原文件为python2,在终端中输入命令:sudomv /usr/bin/python /usr/bin/python2

(2)创建软链接,在终端中输入命令:sudo ln -s /home/python3/bin/python3 /usr/bin/python

备份python2的pip为pip2,输入命令:sudo mv /usr/bin/pip /usr/bin/pip2

为python3的pip创建软链接,输入命令:sudo ln -s /home/python3/bin/pip3 /usr/bin/pip

Step6.python3.6测试

在终端输入命令:python

看到系统提示python3.6.5,证明此时我们已成功安装。

值得注意:因为在Centos中,yum源使用的是Python2.7,替换为Python3以后,yum源无法正常工作。所以我们需要修改yum配置文件。

首先,更改文件权限,在终端输入命令:sudo chmod 777 /usr/bin/yum

在终端输入命令:vi /usr/bin/yum 将#!/usr/bin/python 改为#!/usr/bin/python2.7

输入:wq保存退出后,输入命令:sudoyum search pip 用于测试yum是否正常工作。

以后在使用yum的时候报错也需要把文件里的python改成python2.7

解下来安装airtest

pip install airtest==1.0.24

pip install pocoui==1.0.70

然后把adb添加到环境变量

修改/etc/profile文件使其永久性生效,并对所有系统用户生效,在文件末尾加上如下两行代码
PATH=$PATH:/usr/local/webserver/php/bin:/usr/local/webserver/mysql/bin
export PATH

执行 命令source /etc/profile命令

接下来安装docker

# yum install -y yum-utils   device-mapper-persistent-data lvm2 && yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo -y&&yum  -y install docker-ce-18.06.3.ce-3.el7&&systemctl start docker  &&systemctl status  docker

输入docker version,看到客户端和服务端的信息,则安装成功。

docker安装好以后再pull一下stf需要的几个镜像

sudo docker pull openstf/stf:latest # STF镜像
sudo docker pull rethinkdb:latest # rethinkdb 镜像
sudo docker pull openstf/ambassador:latest
sudo docker pull nginx # nginx 镜像
然后加载容器

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 stf --net host openstf/stf stf local --public-ip 127.0.0.1
值得注意的是此时这里的ip地址是你的ipv4的地址,否则只可以本机访问,

到此docker安装完成、

但是在安装时出现错误的情况:

docker启动STF遇到的一些问题

当我们执行试图启动的时候,在docker中删除原来的stf镜像,重新运行(10.138.61.121 是宿主机IP,10.138.20.194是远程的IP,5037 是宿主机暴露的adb端口),如果没有删除的话我们执行下面的命令

docker run -d --name stf --privileged=true --net host openstf/stf stf local --public-ip 10.138.61.121 --adb-host 10.138.20.194 --adb-port 5037  --allow-remote
会遇到这个问题:

Error response from daemon: Conflict. The container name "/stf" is already in use by container "c8d7f7e010206d185b7969fad8f92e955e8e4b2efb718fd02f82703f8b6b306c". You have to remove (or rename) that container to be able to reuse that name.
其实这个问题就是在于你的之前运行的docker的容器还没有退出,导致出现容器重名的情况,这时候我们需要删除容器

docker rm c8d7f7e010206d185b7969fad8f92e955e8e4b2efb718fd02f82703f8b6b306c(镜像ID)
这时候会出现另外一个问题:

Error response from daemon: You cannot remove a running container c8d7f7e010206d185b7969fad8f92e955e8e4b2efb718fd02f82703f8b6b306c. Stop the container before attempting removal or force remove
此时输出错误是指你不能删除一个正在运行的容器,必须先停止它,才能够删除。于是我们执行:docker stop

我们发现又出现了错误

"docker stop" requires at least 1 argument. See 'docker stop --help'. Usage:  docker stop [OPTIONS] CONTAINER [CONTAINER...] [flags] Stop one or more running containers [root@localhost ~]#  docker rm c8d7f7e010206d185b7969fad8f92e955e8e4b2efb718fd02f82703f8b6b306c Error response from daemon: You cannot remove a running container c8d7f7e010206d185b7969fad8f92e955e8e4b2efb718fd02f82703f8b6b306c. Stop the container before attempting removal or force remove

Docker本身提供了两种终止容器运行的方式,即docker stop与docker kill。

先来说说docker stop吧,当我们用docker stop命令来停掉容器的时候,docker默认会允许容器中的应用程序有10秒的时间用以终止运行。所以我们查看docker stop命令帮助的时候,会有上图的提示:

在docker stop命令执行的时候,会先向容器中PID为1的进程发送系统信号SIGTERM,然后等待容器中的应用程序终止执行,如果等待时间达到设定的超时时间,或者默认的10秒,会继续发送SIGKILL的系统信号强行kill掉进程。在容器中的应用程序,可以选择忽略和不处理SIGTERM信号,不过一旦达到超时时间,程序就会被系统强行kill掉,因为SIGKILL信号是直接发往系统内核的,应用程序没有机会去处理它。在使用docker stop命令的时候,我们唯一能控制的是超时时间,比如设置为20秒超时:docker stop --time=20 container_name

 

docker kill

接着我们来看看docker kill命令,默认情况下,docker kill命令不会给容器中的应用程序有任何gracefully shutdown的机会。它会直接发出SIGKILL的系统信号,以强行终止容器中程序的运行。通过查看docker kill命令的帮助,我们可以看到,除了默认发送SIGKILL信号外,还允许我们发送一些自定义的系统信号:

Usage:  docker kill [OPTIONS] CONTAINER [CONTAINER...] Kill one or more running containers Options:       --help            Print usage   -s, --signal string   Signal to send to the container (default "KILL")

比如,如果我们想向docker中的程序发送SIGINT信号,我们可以这样来实现: 1 docker kill --signal=SIGINT container_name 与docker stop命令不一样的地方在于,docker kill没有任何的超时时间设置,它会直接发送SIGKILL信号,以及用户通过signal参数指定的其他信号。 其实不难看出,docker stop命令,更类似于Linux系统中的kill命令,二者都是发送系统信号SIGTERM。而docker kill命令,更像是Linux系统中的kill -9或者是kill -SIGKILL命令,用来发送SIGKILL信号,强行终止进程。 在程序中接收并处理信号

了解了docker stop与docker kill的区别,我们能够知道,docker kill适合用来强行终止程序并实现快速停止容器。而如果希望程序能够gracefully shutdown的话,docker stop才是不二之选。这样,我们可以让程序在接收到SIGTERM信号后,有一定的时间处理、保存程序执行现场,优雅的退出程序。

一切都做好了以后我们在开始指定容器停止

 docker stop --time=20 stf

终止成功!

然后在删除

 docker rm c8d7f7e010206d185b7969fad8f92e955e8e4b2efb718fd02f82703f8b6b306c

删除成功!

docker run -d --name stf --privileged=true --net host openstf/stf stf local --public-ip 10.138.61.121 --adb-host 

然后我们在重新走一遍docker run -d --name stf --privileged=true --net host openstf/stf stf local --public-ip 10.138.61.121 --adb-host 10.138.2

重启后开启stf

sudo service docker start

docker start rethinkdb

adb start-server

docker start stf

 

 


最后感谢

https://blog.csdn.net/saint_228/article/details/88690103

https://blog.csdn.net/u012070360/article/details/82259815

 

 类似资料: