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+常见问题排查:
npm ERR!报错:尝试删除node_modules后执行npm cache clean --force- 权限问题:永远不要使用sudo运行npm install
- 网络超时:配置国内镜像源
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 ~/.bashrc2. 核心服务安装与配置
2.1 STF主服务安装
通过npm全局安装STF客户端工具和服务器组件:
npm install -g stf npm install -g @devicefarmer/stf创建专用运行用户(避免使用root):
sudo useradd -m stf sudo usermod -a -G plugdev stf2.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-rules3. 服务启动与验证
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 startup3.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认证,直接点击登录即可。
设备连接检查:
- 执行
adb devices确认设备已列出 - STF界面右上角应显示"Ready"状态
- 点击"Devices"标签应看到已连接设备
4. 常见问题解决方案
4.1 设备离线问题排查
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 设备列表为空 | USB调试未开启 | 在设备开发者选项中启用USB调试 |
| 设备状态为Offline | ADB版本不匹配 | 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 安全加固措施
- 替换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"- 启用HTTPS:
pm2 start stf --name "stf" -- ssl --port 7443 \ --ssl-key /path/to/key.pem \ --ssl-cert /path/to/cert.pem- 定期备份策略:
# 每日数据库备份 0 3 * * * mysqldump -u stf -ppassword stf > /backups/stf-$(date +\%Y\%m\%d).sql