STF环境安装与配置全指南

发布时间:2026/10/27 3:11:13
STF环境安装与配置全指南

1. STF环境安装全流程解析

STF(Smartphone Test Farm)作为开源移动设备管理平台,在自动化测试领域应用广泛。但环境搭建过程中依赖项多、配置复杂,新手常会遇到各种"坑"。本文将基于实际部署经验,从零开始梳理完整安装流程,重点解决以下核心问题:

  • 多语言环境协同配置(Node.js/Java/Python)
  • 关键依赖项的版本兼容性问题
  • 服务组件间的网络通信配置
  • 真机设备的ADB连接调试

1.1 基础环境准备

操作系统建议使用Ubuntu 20.04 LTS或CentOS 7+,以下为必须安装的组件及其作用说明:

# 必须组件清单 sudo apt update sudo apt install -y \ git \ adb \ android-sdk-platform-tools \ graphicsmagick \ imagemagick \ libavahi-compat-libdnssd-dev \ libbz2-dev \ libcairo2-dev \ libjpeg-dev \ libpango1.0-dev \ libgif-dev \ librsvg2-dev \ libsqlite3-dev \ libssl-dev \ python \ build-essential

关键提示:GraphicsMagick必须安装1.3.36以下版本,新版存在兼容性问题。可通过gm -version验证,若已安装错误版本需执行:

sudo apt remove graphicsmagick wget https://downloads.sourceforge.net/project/graphicsmagick/graphicsmagick/1.3.35/GraphicsMagick-1.3.35.tar.gz tar xzf GraphicsMagick-1.3.35.tar.gz cd GraphicsMagick-1.3.35 ./configure make sudo make install

1.2 Node.js环境配置

STF要求Node.js版本14.x-16.x,推荐使用nvm管理多版本:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash source ~/.bashrc nvm install 16.14.2 nvm use 16.14.2

验证安装:

node -v # 应输出v16.14.2 npm -v # 建议8.x+

常见问题排查:

  1. npm ERR!报错:尝试删除node_modules后执行npm cache clean --force
  2. 权限问题:永远不要使用sudo运行npm install
  3. 网络超时:配置国内镜像源npm config set registry https://registry.npmmirror.com

1.3 Java环境部署

STF依赖Java 8运行环境,但注意不要安装OpenJDK 11+:

sudo apt install -y openjdk-8-jdk java -version # 应显示"1.8.0_xxx"

配置JAVA_HOME环境变量:

echo 'export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))' >> ~/.bashrc source ~/.bashrc

2. 核心服务安装与配置

2.1 STF主服务安装

通过npm全局安装STF客户端工具和服务器组件:

npm install -g stf npm install -g @devicefarmer/stf

创建专用运行用户(避免使用root):

sudo useradd -m stf sudo usermod -a -G plugdev stf

2.2 数据库配置

STF默认使用SQLite,生产环境建议改用MySQL/PostgreSQL。以MySQL为例:

sudo apt install -y mysql-server sudo mysql -e "CREATE DATABASE stf; CREATE USER 'stf'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON stf.* TO 'stf'@'localhost';"

配置STF连接数据库:

// ~/.stf/config.json { "storage": { "options": { "dialect": "mysql", "host": "localhost", "port": 3306, "username": "stf", "password": "password", "database": "stf" } } }

2.3 ADB服务配置

确保adb可检测到设备:

sudo usermod -a -G plugdev $USER adb kill-server adb start-server adb devices

配置udev规则(以Google Pixel为例):

echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"' | sudo tee /etc/udev/rules.d/99-android.rules sudo udevadm control --reload-rules

3. 服务启动与验证

3.1 启动STF服务

使用PM2进行进程管理:

npm install -g pm2 pm2 start stf --name "stf" -- migrate pm2 start stf --name "stf" -- auth-mock --port 7100 --websocket-port 7110 pm2 start stf --name "stf-triproxy" -- triproxy app --bind-pub "tcp://127.0.0.1:7111" --bind-dealer "tcp://127.0.0.1:7112" --bind-pull "tcp://127.0.0.1:7113" pm2 save pm2 startup

3.2 防火墙配置

开放必要端口(以UFW为例):

sudo ufw allow 7100/tcp # Web界面 sudo ufw allow 7110/tcp # WebSocket sudo ufw allow 5037/tcp # ADB sudo ufw allow 27100:29999/tcp # 设备端口范围

3.3 访问验证

浏览器访问http://服务器IP:7100应看到登录界面。默认使用mock认证,直接点击登录即可。

设备连接检查:

  1. 执行adb devices确认设备已列出
  2. STF界面右上角应显示"Ready"状态
  3. 点击"Devices"标签应看到已连接设备

4. 常见问题解决方案

4.1 设备离线问题排查

现象可能原因解决方案
设备列表为空USB调试未开启在设备开发者选项中启用USB调试
设备状态为OfflineADB版本不匹配adb kill-server && adb start-server
频繁断开连接供电不足使用带外接电源的USB Hub

4.2 性能优化配置

修改config.json增加以下参数:

{ "processor": { "interval": 5000, "concurrency": 4 }, "storage": { "maxFileSize": 10485760 } }

4.3 日志分析技巧

关键日志路径:

  • PM2日志:pm2 logs stf
  • ADB日志:adb logcat
  • STF服务日志:~/.pm2/logs/stf-out.log

典型错误模式:

E/STF:Provider - [*] Unable to connect to ZMQ

表示需要检查triproxy服务是否正常运行

5. 生产环境部署建议

5.1 高可用架构

graph TD A[Load Balancer] --> B[STF Server 1] A --> C[STF Server 2] B --> D[MySQL Cluster] C --> D D --> E[Shared Storage]

5.2 安全加固措施

  1. 替换mock认证:
pm2 start stf --name "stf" -- auth-ldap --port 7100 \ --ldap-url "ldap://your-ldap-server" \ --ldap-bind-dn "cn=admin,dc=example,dc=com" \ --ldap-bind-credentials "password" \ --ldap-search-dn "ou=users,dc=example,dc=com"
  1. 启用HTTPS:
pm2 start stf --name "stf" -- ssl --port 7443 \ --ssl-key /path/to/key.pem \ --ssl-cert /path/to/cert.pem
  1. 定期备份策略:
# 每日数据库备份 0 3 * * * mysqldump -u stf -ppassword stf > /backups/stf-$(date +\%Y\%m\%d).sql