STF AppGui 自动化之度化 Stf 环境

牛马搬砖君 · 2019年12月05日 · 3349 次阅读

什么是 Stf
Stf 全称 Smartphone Test Farm ,一款 WEB 端移动设备批量管理工具(Remote control all your Smartphone devices),目前仅支持 android 设备,可以在 mac 和 linux 上 windows 上搭建过。关于 stf 更多介绍,可以参考官方网址https://openstf.io/

基础环境准备:

基础环境准备:
win10 笔记本一台台式机也可以
VMware Workstation Pro 虚拟机
centos7 镜像一份
xshell 远程终端

基础环境资源下载
VMware Workstation Pro(里面包含各个版本的安装包,附带激活码)
链接:https://pan.baidu.com/s/1LUnIceggYt7rZP_pkNaxTg
提取码:wcj6
centos7
链接:https://pan.baidu.com/s/1oZYXZLXQA_wk94auAu2nIw
提取码:23r6
xshell(软件已经破解,不用担心激活问题哦)
链接:https://pan.baidu.com/s/1j--qoTyzTz5veUc_o6MxaQ
提取码:qln1
基础环境安装大家就自行百度吧

2.4:liunx 桥接方式设置网络静态 IP
桥接模式
VMware 桥接模式,也就是将虚拟机的虚拟网络适配器与主机的物理网络适配器进行交接,虚拟机中的虚拟网络适配器可通过主机中的物理网络适配器直接访问到外部网
络,简而言之,这就好像在局域网中添加了一台新的、独立的计算机一样。因此,虚拟机也会占用局域网中的一个 IP 地址,并且可以和其他终端进行相互桥接模式网络连接
支持有线和无线主机网络适配器。如果你想把虚拟机当做一台完全独立的计算机看待,并且允许它和其他终端一样的进行网络通信,那么桥接模式通常是虚拟机访问网络的最简单途径。
2.4.2:设置 VMware Workstation Pro 网络适配器
VMware 的菜单中,编辑->虚拟网络编辑器

修改 VMnet 信息中的 “桥接到” 为网卡适配器,默认是自动。

修改配置文件,设置静态 ip
2.5.1:查看自己的 ip

** centos7 使用命令===========>ip addr**

编辑网卡文件

cd  etc/sysconfig/network-scripts/ifcfg-ens33
这里需要使用到vim编辑器,不会的可以自己百度一下
 vim /etc/sysconfig/network-scripts/ifcfg-ens33
没有vim的小伙伴可以使用vi /etc/sysconfig/network-scripts/ifcfg-ens33

修改内容如下:

PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="b94b6b88-d753-4f38-a049-3115ab74ecc4"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="10.0.0.192"
NETMASK="255.255.255.0"
GATEWAY="10.0.0.1"
DNS1="10.0.0.1"

### 退出重启 network

systemctl restart network
或者使用
 service network restart


以上步骤,要是有服务器的小伙伴可以忽略

Stf 需要依赖包准备

JDK1.8版本安装包
Androidsdk(关键是adb)
nodejs
pkg-config
build-essentials
rethinkdb
wget
GraphicsMagick
zeromq
yasm
libsodium
Protocol Buffers

处理 stf 安装环境依赖

#JDK1.8
cd /usr/local/
mkdir java
rz 选择jdk-8u231-linux-x64.tar.gz
tar xvf jdk-8u231-linux-x64.tar.gz 

#Androidsdk
cd /usr/local/
mkdir android
rz 选择android-sdk_r24.4.1-linux.tgz上传
tar xvf android-sdk_r24.4.1-linux.tgz
偷个懒~~~~~~~:smiling_imp: :smiling_imp: 
#nodejs
cd /usr/local/
rz 选择 node-v12.13.1-linux-x64.tar.xz上传
tar xvf node-v12.13.1-linux-x64.tar.xz
mv node-v12.13.1-linux-x64.tar.xz node 

### 配置环境变量,这里需要使用到 vim 编辑器,


cd etc/
vim profile
在done和unset之间添加如下变量:

# Java Environment Path
export JAVA_HOME=/usr/local/java/jdk1.8.0_231
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# Android Environment Path
export ANDROID_HOME=/usr/local/android/android-sdk-linux
export PATH=${PATH}:${ANDROID_HOME}/tools
export PATH=${PATH}:${ANDROID_HOME}/platform-tools
# Nodejs Environment Path
export NODE_HOME=/usr/local/node
export PATH=$PATH:$NODE_HOME/bin 
export NODE_PATH=$NODE_HOME/lib/node_modules

#### 按下 Esc :wq 保存退出

执行命令 source profile 使环境变量生效

验证环境变量是否配置成功

java
javac
java -version
 android -h
 adb --version 出现报错
 想偷懒是不可能滴:flushed: :flushed: 
 开始还债了。。。。。。。。。:smirk_cat: :smirk_cat: 
 因为刚才偷懒把环境变量留到一起配置了
 所以导致缺少adb的Platform-tools包和sdk的 Build-tools包
 列出所有Android的版本
android list sdk --all
 选择自己需要的版本安装例如:
 android update sdk -u --all --filter 1,2,3
 再次执行adb --version验证adb版本
偷懒的还清了继续验证环境变量
   node -v
   npm -v

### 接下来的操作切换到 opt 目录

#pkg-config
rz 选择 pkg-config上传
tar xvf pkg-config-0.29.2.tar.gz.gz
cd pkg-config-0.29.2/
./configure --prefix=/usr/local/pkg-config --with-internal-glib
make
make install
#build-essentials
 yum groupinstall "Development Tools"  
 yum install -y gcc g++ kernel-devel
#rethinkdb
 wget http://download.rethinkdb.com/centos/7/`uname -m`/rethinkdb.repo \
 -O /etc/yum.repos.d/rethinkdb.repo

 yum install -y rethinkdb
#GraphicsMagick
rz 选择 GraphicsMagick-1.3.29.tar.gz上传
解压
tar xvf GraphicsMagick-1.3.29.tar.gz
cd GraphicsMagick-1.3.29/
./configure --prefix=/usr/local/gm
make
make install
#zeromq
rz 选择 zeromq-4.3.2.tar.gz上传
tar xvf zeromq-4.3.2.tar.gz
cd zeromq-4.3.2/
./configure --prefix=/usr/local/zeromq
make
make install

#yasm
rz 选择yasm-1.3.0.tar.gz上传
tar xvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure --prefix=/usr/local/yasm
make
make install
#libsodium
rz 选择 libsodium-1.0.18.tar.gz 上传
tar xvf libsodium-1.0.18.tar.gz
./configure --prefix=/usr/local/libsodium
make
make install
#Protocol Buffers
 rz 选择protobuf-cpp-3.9.2.tar.gz上传
 tar xvf protobuf-cpp-3.9.2.tar.gz
 cd protobuf-3.9.2/
 ./configure --prefix=/usr/local/protobuf
 make
 make intall
配置环境变量
cd etc/
vim profile
# protobuf Environment Path
export PATH=$PATH:/usr/local/protobuf/bin/
export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/

执行命令source profile 使环境变量生效

安装 stf

   使用root操作
npm install -g stf
这时可以休息几分钟了,辛苦了这么久,可以喝杯热茶:coffee: ,再来半个西瓜了:watermelon: :watermelon: 

### 安装出现第一个报错

current user ("nobody") does not have permission to access the dev dir "/root/.cache/node-gyp/12.13.1"
gyp WARN EACCES attempting to reinstall using temporary dev dir "/usr/local/node/lib/node_modules/stf/node_modules/bufferutil/.node-gyp"
gyp WARN install got an error, rolling back install
gyp WARN install got an error, rolling back install
gyp ERR! configure error 
gyp ERR! stack Error: EACCES: permission denied, mkdir '/usr/local/node/lib/node_modules/stf/node_modules/bufferutil/.node-gyp'
gyp ERR! System Linux 3.10.0-862.el7.x86_64

报错原因:报错原因:nobody 用户 没有权限
纳尼?,为什么会没有走 root 用户呢?nobody 用户是个什么鬼❓ ❓ ❓ ,我没有创建这个用户啊?🤔 🤔 🤔 掀桌子

这里有个误区大家需要注意??
一般人都会使用不怎么了解 liunx 权限的都会直接使用
chmod 777 nobody usr/local/**
chmod 命令是修改权限不是给用户赋予权限,这里应该使用 chown 命令
chown -R 用户名 目录
chown -R nobody usr/local/**

1.搞清楚 nobody 用户这么来的?

正如window系统在安装完毕后会自动建立一些用户账号,linux也会生成一些目标是为了完成特定任务的账号,如nobody和ftnobody是一个普通用户,没有特权,他存在的目的是为了让任何人都能登录系统,通俗来说: 一个系统,任何人都能登录,那么当我们登录后,我们的身份是什么,我们是nobody,可以看做一个特殊的名分。很多系统都会按照惯例创建一个nobody,并且将其权限降到最低,例如服务器对外公布,会让客户以nobody身份登录 由于权限很低,这样能降低风险,这也是其存在的意义。 

2.给 nobody 用户赋予 url/目录的/usr/local/权限

   这里有个误区大家需要注意??
一般人都会使用不怎么了解liunx权限的都会直接使用
chmod 777  nobody usr/local/**
chmod 命令是修改权限不是给用户赋予权限,这里应该使用chown命令
chown -R 用户名 目录
chown -R nobody usr/local/**

报错二:nodejs 编译缺少 node-gyp

 bufferutil@1.3.0 install: `node-gyp rebuild`
 npm ERR! Exit status 1

解决办法: npm install -g node-gyp

报错三:执行 npm install -g stf node-gyp 卡死

gyp WARN EACCES attempting to reinstall using temporary dev dir "/usr/local/node/lib/node_modules/stf/node_modules/dtrace-provider/.node-gyp"
这时候可能需要降低nodejs版本了
1. nodejs 版本不匹配,这个问题你可能要多尝试几个版本了

### 在这里其实可以发现报错三和报错四的第二个问题是都是 nobody 用户引起的😅 😅
报错四
./stf doctor 的时候 ERR/cli:doctor 41185 [] Unexpected error checking ZeroMQ: Error: Could not locate the bindings file. Tried:*

解决办法:
    npm install zmq

报错五:../binding.cc:28:17: 致命错误:zmq.h:没有那个文件或目录

解决办法:
yum install czmq-devel 
或
apt-get install libzmq3-dev
也可以npm install 安装

报错六:gyp WARN EACCES user “root” does not have permission to access

❓ ❓ ❓ 我不是 root 用户吗?在系统内部居然还会出现没有权限的错误

解决办法:chmod -R 权限数字 对应陌路
给对应的文件 添加读写执行权限,我这里给了777的权限,:grin: ,反正问题是解决了
例如:chmod -R 777 /var/root

报错七:启动 stf 后总是提示有 找不到 node-v57-linux-x64 下的一个文件 jpegturbo.node 的报错

出现原因:系统中没有这个node-v57-linux-x64,而是node-v47-darwin-x64.
解决办法:npm rebuild

个人建议4. 安装完成后在,/usr/local/lib/node_modules/stf, 目录下执行一下 nmp install 将依赖更新一下

正如长风破浪会有时,直挂云帆济沧海,一路披荆斩棘,历经艰难重重。终于把 npm install -g stf 这一步走完了

检查环境依赖

cd usr/local/node/lib/node_modules/stf/bin/
./stf doctor

报错八:stf doctor 自检时 zmq 问题

解决办法:
使用 npm install -g zmq
但是在这里会出现执行npm install -g stf node-gyp卡死**
gyp WARN EACCES attempting to reinstall using temporary dev dir "/usr/local/node/lib/node_modules/stf/node_modules/dtrace-provider/.node-gyp"
解决办法:
使用 npm install -g zmq 安装默认走nobody用户,造成.node-gyp"卡死单个线程cpu超过100%
解决办法:npm install -g zmq --unsafe-perm=true --allow-root 加上--unsafe-perm=true --allow-root参数执行

报错九:libzmq.so.5 not found

cd /etc
vi /etc/ld.so.conf
#新增一行:
/usr/local/zeromq/lib
ldconfig

### 运行启动 STF
本地启动

stf local
本地浏览器输入127.0.0.1:7100访问

远程访问启动

./stf local --public-ip 本地ip --allow-remote

远程访问报错

遇到问题:启动成功了无法访问?
可能是防火墙未关闭,关闭方法
#检查防火墙状态
firewall-cmd --state
#关闭防火墙
systemctl stop firewalld.service
#禁止开机启动
systemctl disable firewalld.service

访问成功画面如下

远程添加设备

将其他电脑上连接的手机加到STF
比如将win10上一台手机添加到STF上,在 win10执行:
adb nodaemon server -a -P 5037
在centos执行:
stf provider --name mikezhoudeMac-mini.local --min-port 7400 --max-port 7700 --connect-sub tcp://127.0.0.1:7114 --connect-push tcp://127.0.0.1:7116 --group-timeout 20000 --public-ip 172.31.11.171 --storage-url http://localhost:7100/ --adb-host 172.31.9.146 --adb-port 5037 --vnc-initial-size 600x800 --allow-remote

先写到这吧,遇到新坑再来补充,希望对你有所帮助
结束语
作为一个合格的测试小白,技术太菜可以被鄙视,文章写的不好可以被喷,但是学习的心不能质疑。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册