搭建自己的OpenSTF手机设备云平台详细步骤

目录

试想一下,如果公司的设备有限,有的人要用一下,只是看一个东西,借走了设备很久不还。 有的时候开发在别的楼层,想看个东西。或者跟你一起重现一下bug. 那么得跑来跑去的。 有没有办法共享一下屏幕?让他不需要浪费在路上,或者占用设备资源。
STF就可以解决这个问题。什么是OpenSTF?
OpenSTF是一个手机设备管理平台,可以对手机进行远程管理、调试、远程手机桌面监控等操作。 这个系统类似于目前很流行的云测服务比如Testin,虽然网页上提供的设备很像模拟器中的设备,但是实际上都是真机。
OpenSTF是使用nodejs和angularjs开发,遵循apache licene2.0开源协议,用户可以对源码进行修改发布。 STF把所有的手机都连接到一台电脑,只要其他电脑和这台电脑处于同一个局域网下(公司内部一般都是处于一个局域网下), 那么其他电脑就可以通过浏览器输入地址,访问这电脑所连接的所有设备。并且可以上面进行操纵。
OpenSTF的功能:
1、 在Web上支持管理上百个android设备。 2、 支持Android多个版本(2.3.3 ~ 8.0),而且不需要root。 3、 实时屏幕操作和显示。 4、 支持adb connnect远程连接调试。 5、 可以从PC机键盘输入到远程的android设备中。 6、 安装卸载APK。 7、 android设备信息的展示(如:网络状态、MIME、android版本、手机型号等等)。 8、 远程开关机、远程开关WIFI、截屏、LogCat等等。

Linux(CentOS7)搭建STF

安裝nodejs

安裝jdk

安裝Android-sdk-linux

普通搭建方式

(1) 安装rethinkdb数据库

(2) 安装graphicsmagick

(3) yasm安装

(4) libsodium安装

(5) Zeromq安装

(6) protobuf安装

(7) pkg-config安装

(8) stf安装

(9) Stf Doctor检测STF

(10) 启动rethinkdb

(11) 启动STF

Docker搭建方式

(1)安装docker

(2)拉取adb镜像

(3)拉取rethinkdb镜像

(4)拉取openstf/stf镜像

 

Mac搭建STF(兼容IOS设备)

(1) 安装brew

(2) 安装nodejs

(3) 安装jdk

(4) 安装android sdk

(5) 安装stf依赖

(6) 安装libimobiledevice等依赖工具

(7)下载WebDriverAgent源码

(8) 下载Stf源码


OpenSTF是一个手机设备管理平台,可以对手机进行远程管理、调试、远程手机桌面监控等操作。这个系统类似于目前很流行的云测服务比如Testin,虽然网页上提供的设备很像模拟器中的设备,但是实际上都是真机。

官方源码地址:https://github.com/openstf

OpenSTF是使用nodejs和angularjs开发,遵循apache licene2.0开源协议,用户可以对源码进行修改发布,

  1. 页面的HTML使用帕格模版引擎.pug
  2. 前端使用的是Angularjs
  3. 后端使用的是的NodeJS
  4. 数据库使用的是对象型数据库 Rethinkdb采用的是json字符串格式保存数据

目录解读:

/.tx transifex网站相关的配置,主要是用于其它语言翻译
/bin 启动文件,其实是连接到lib/cli.js
/docker Docker的相关配置
/lib 后端代码
/conf 应该是mysql的配置文件,但是目前没有使用
/doc 关于STF平台的说明
/test 检测平台的状态
/vendor 需要安装到手机上的应用或者服务
/node_modules npm相关组件
/rethinkdb_data rethinkdb的数据库文件
package.json npm所需要的组件集,以json格式保存
………… 其它说明文件与打包

 

Linux(CentOS7)搭建STF

安裝nodejs

配置环境变量:

  • vim /etc/profile

在文件中增加如下内容:

  • export NODE_HOME=/usr/local/node/node-linux-x64
  • export PATH=$PATH:${NODE_HOME}/bin;

安装完后,查看版本号,是否安装成功

npm安装所在目录:cd /usr/local/node/node-v8.14.0-linux-x64/lib/node_modules/

之前安装了node10.x,可能是版本的问题,导致安装stf一直不成功,后面百度资料,降低node版本到8.14

安裝jdk

输入java -version,可以看到系统自带的OpenJDK版本信息。

rpm -qa | grep java

下面这几个可以删除, 例如:

  • rpm -e --nodeps java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64

检查是否已经删除成功

java -version

执行安装

  • 下载JDK文件:/usr/local/node/download/jdk-8u141-linux-x64.tar.gz
  • 解压JDK安装文件:tar xvzf jdk-8u141-linux-x64.tar.gz
  • 移动JDK文件:mv jdk1.8.0_141 /usr/local/java

配置环境变量

  • export JAVA_HOME=/usr/local/java/jdk1.8.0_141
  • CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib
  • export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin;

安裝Android-sdk-linux

  • 下载文件:/usr/local/node/download/android-sdk_r24.2-linux.tgz
  • 解压文件:tar xvzf android-sdk_r24.2-linux.tgz
  • 移动文件:mv android-sdk-linux /usr/local/Android-SDK

配置环境变量

  • export ANDROID_HOME=/usr/local/Android-SDK/android-sdk-linux
  • export PATH=$PATH:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools;

上述执行,是没有包含SDK tools插件的, 可执行以下步骤获取:

安装sdk所有的插件:android update sdk --no-ui

普通搭建方式

(1) 安装rethinkdb数据库

  • cd /usr/local
  • mkdir supporters
  • cd /usr/local/supporters
  • wget http://download.rethinkdb.com/centos/7/`uname -m`/rethinkdb.repo -O /etc/yum.repos.d/rethinkdb.repo
  • yum install rethinkdb

可参考:https://rethinkdb.com/docs/start-a-server/

(2) 安装graphicsmagick

配置环境变量

  • export GRAPHICS_MAGICK_HOME=/usr/local/supporters/config/graphicsmagick
  • export PATH=$PATH:${GRAPHICS_MAGICK_HOME}/bin;

验证安装结果:

(3) yasm安装

  • cd /usr/local/supporters
  • wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
  • sudo tar -zxvf yasm-1.3.0.tar.gz
  • cd yasm-1.3.0
  • ./configure --prefix=/usr/local/supporters/config/yasm
  • sudo make
  • sudo make install

配置环境变量

  • export YASM_HOME=/usr/local/supporters/config/yasm
  • export PATH=$PATH:${YASM_HOME}/bin;

查看安装结果:

(4) libsodium安装

  • cd /usr/local/supporters
  • wget https://download.libsodium.org/libsodium/releases/libsodium-1.0.18.tar.gz
  • sudo tar xvf libsodium-1.0.18.tar.gz
  • cd libsodium-1.0.18/
  • sudo ./configure
  • sudo make
  • sudo make install

查看安装结果:

(5) Zeromq安装

  • cd /usr/local/supporters
  • wget https://github.com/zeromq/libzmq/releases/download/v4.2.2/zeromq-4.2.2.tar.gz
  • sudo tar xvf zeromq-4.2.2.tar.gz
  • cd zeromq-4.2.2/
  • sudo ./configure --without-libsodium
  • sudo make
  • sudo make install

(6) protobuf安装

  • cd /usr/local/supporters
  • wget https://github.com/google/protobuf/releases/download/v3.5.0/protobuf-cpp-3.5.0.tar.gz
  • sudo tar xvf protobuf-cpp-3.5.0.tar.gz
  • cd protobuf-3.5.0/
  • sudo ./configure --prefix=/usr/local/supporters/config/protobuf
  • sudo make
  • sudo make install

配置变量:

vim /etc/profile

在文件中增加如下内容:

  • export PROTOBUF_HOME=/usr/local/supporters/config/protobuf
  • export PATH=$PATH:${PROTOBUF_HOME}/bin:${PROTOBUF_HOME}/lib/pkgconfig;

执行:source /etc/profile

查看安装结果:

(7) pkg-config安装

  • cd /usr/local/supporters
  • wget http://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz
  • sudo tar xvf pkg-config-0.29.2.tar.gz
  • cd pkg-config-0.29.2
  • ./configure --prefix=/usr/local/supporters/config/pkg-config --with-internal-glib
  • make
  • make install

查看安装结果:

(8) stf安装

  • npm config set unsafe-perm=true
  • npm install -g stf

(9) Stf Doctor检测STF

  • cd /usr/local/node/node-linux-x64/lib/node_modules/stf/bin/
  • ./stf doctor

上述图片检查,发现有个问题,解决方案:

sudo vim /etc/ld.so.conf

在文件里添加:/usr/local/lib

运行:ldconfig

再次检查环境:./stf doctor

(10) 启动rethinkdb

先启动rethinkdb,然后再使用stf local启动平台

  • cd /usr/local/supporters/
  • mkdir rethinkdb
  • cd /usr/local/supporters/rethinkdb/
  • rethinkdb --bind all --cache-size 8192 --http-port 8090 &

访问rethinkdb:  http://服务器IP:8090

(11) 启动STF

cd /usr/local/node/node-linux-x64/lib/node_modules/stf/bin/

./stf local --public-ip 服务器IP --allow-remote --no-cleanup

启动成功后,访问stf: http://服务器IP:7100

输入账号密码就可以登录,密码是邮件格式,不做校验。

 

Docker搭建方式

(1)安装docker

(2)拉取adb镜像

拉取命令:docker pull sorccu/adb

启动命令:docker run -di -v /dev/bus/usb:/dev/bus/usb --name=adbd --privileged --net host sorccu/adb:latest

(3)拉取rethinkdb镜像

拉取命令:docker pull rethinkdb

启动命令:sudo docker run -d --name rethinkdb -v /srv/rethinkdb:/data --net host rethinkdb rethinkdb --bind all --cache-size 8192 --http-port 8090

(4)拉取openstf/stf镜像

拉取命令:docker pull openstf/stf

启动命令:sudo docker run -d --name stf --net host openstf/stf stf local --public-ip 服务器IP --no-cleanup

--no-cleanup 这个参数很重要,之前部署安装APP的时候,已经安装好的APP,再stopusing后再连接,发现安装好的APP不见了,加上这个参数就ok了

run stf的时候需要注意ip的填写,虚拟机需要打开网络桥接模式

 

常见问题:

启动stf会自动安装stf到手机,但依然不能控制手机。是因为手机不会自动运行stf的服务器。执行以下命令即可(PS:执行以下命令,保证只有1台设备,且是需要手工拉起stf服务的设备)

adb -s 设备id shell am start -n jp.co.cyberagent.stf/.IdentityActivity

adb -s 设备id shell am startservice -n jp.co.cyberagent.stf/.Service

 

Mac搭建STF(兼容IOS设备)

IOS设备要依赖WebDriverAgent(简称wda)实现端对端UI测试,WebDriverAgent 在 iOS 端实现了一个 WebDriver Server ,借助这个 server 我们可以远程控制 iOS 设备, 能同时支持模拟器和真机, 真机运行需要证书和描述文件,个人免费证书也可以,注意配置WebDriverAgentRunnerRunner工程就行。

参考巨人的文章实行搭建:https://testerhome.com/topics/19548

(1) 安装brew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

(2) 安装nodejs

brew install node -g

安装下node版本管理工具n

brew install n

这里node安装两个版本,一个最新版,一个是v8.14的版本,appium-doctor检测适用于最新版node,stf适用于8.14的版本

n指定版本:sudo n 8.14 

n切换版本:sudo n

(3) 安装jdk

(4) 安装android sdk

(5) 安装stf依赖

  • brew install rethinkdb graphicsmagick zeromq protobuf yasm pkg-config

(6) 安装libimobiledevice等依赖工具

  • brew install usbmuxd
  • brew link usbmuxd
  • brew install libimobiledevice
  • brew install ideviceinstaller
  • brew install carthage
  • brew install socat

(7)下载WebDriverAgent源码

git clone https://github.com/mrx1203/WebDriverAgent.git 

 (参考大神源码,在此源码基础上调整安装个人免费证书)

进入WebDriverAgent目录,执行进行编译安装

  • cd /usr/local/lib/node_modules/WebDriverAgent/
  • ./Scripts/bootstrap.sh

编译完毕,用Xcode打开WebDriverAgent.xcodeproj,电脑接入iOS设备(注意,这里调试的都是系统版本为13.2的)

由于苹果对证书要求非常严格,必须在证书设备列表中设备才能安装打包后的app.

image

 

  1. 可以使用公司苹果开发者账号,需要找开发同学加权限

  2. 可以使用个人免费开发者账号

这里安利个人免费安装证书:

Xcode-----》Preferences-----》Accounts添加apple Id

PROJECT--->WebDriverAgent--->info

TAEGETS--->WebDriverAgentLib--->General

TAEGETS--->WebDriverAgentLib--->Signing & Capabilities

TAEGETS--->WebDriverAgentLib--->Build Settings

TAEGETS--->WebDriverAgentRunner--->Signing&Capblities

TAEGETS--->WebDriverAgentRunner--->BuildSettings

执行安装证书

(1)Scheme 选择WebDriverAgentRunner

(2)执行test

test成功后,会发现手机设备自动安装上了一个WebDriverAgentRunner-Runner.app

在设置---》通用---》描述文件与设备管理 里面信任这个证书

此时在浏览器可以正常打开http://192.168.96.14:8100/status

以上方式就是安装个人免费证书的步骤了,当然也可以在终端通过命令执行安装

进入根目录,执行命令:

Xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=9251e39b63331e52538dc2cc122e72da3d652b41' test

 

设备ID:可以通过执行命令得到:idevices_id -l

(8) 下载Stf源码

git clone https://github.com/mrx1203/stf.git  

(参考大神的源码,在此源码基础上优化)

执行npm install 自动安装所需的插件

启动rethinkdb:

  • cd /usr/local/supporters/rethinkdb/
  • rethinkdb --bind all --cache-size 8192 --http-port 8090 &

编译stf源码后,启动stf

  • cd /usr/local/lib/node_modules/stf/bin/
  • ./stf local --public-ip 服务IP --allow-remote --no-cleanup --wda-path /usr/local/lib/node_modules/WebDriverAgent/ --wda-port 8100

因为STF源码中包括有自动xcodebuild证书安装的部分,所以上面第三步必须测试成功后,再启动stf

其中会遇到很多问题,见招拆招吧。

 

如果启动stf遇到该问题ideviceinfo returned an error: Could not connect to lockdownd, error code -21

则尝试这种方案解决:

sudo chmod -R 777 /var/db/lockdown brew update brew uninstall --ignore-dependencies libimobiledevice brew uninstall --ignore-dependencies usbmuxd brew install --HEAD usbmuxd brew unlink usbmuxd brew link usbmuxd brew install --HEAD libimobiledevice brew install ideviceinstaller flutter doctor (检测是否成功) 如果还是不行的话请重启电脑后再执行flutter doctor命令检测成功与否。