之前做私域流量,研究了很多微信群发的消息,无意中发现了stf这个非常棒的开源手机群控系统,可以实现远程、实时的操控手机,一部旧android机,一台树莓派即可搭建一个可以实时为自己实现云手机的系统。

并且可以针对于刷榜的手机墙、积分墙、自动化测试、批量执行进行定制开发,极其简单。

在网上搜过一些资料,无非都是复制粘贴的,没什么营养。都是简单搭建简单使用。本次想借此机会把踩的坑都梳理一下并做详细记录。

下面我们来详细了解一下OpenSTF,会从几个角度分别梳理

一、搭建OpenSTF系统

二、连接手机设备

三、系统角色权限

四、远程调试

五、远程访问令牌

六、Jenkins集成

七、App控制

八、分布式部署OpenSTF

(一)搭建OpenSTF系统

有两种方式:

1. 通过Docker

2. 自己按照步骤搭建(坑比较多,不推荐)

鉴于系统搭建的通用性,我们这里暂时只说通过docker方式搭建的情况

docker搭建stf需要三个镜像:stf、rethinkdb、adbd

这里建议使用docker-compose来配置:

version: "3"
services:rethinkdb:image: rethinkdbcontainer_name: rethinkdbrestart: alwaysvolumes:- "/docker/openstf/rethinkdb:/data"adbd:image: sorccu/adb:latestcontainer_name: adbdprivileged: truerestart: alwaysvolumes:- "/dev/bus/usb:/dev/bus/usb"- "/data:/data"stf:build: .container_name: stfrestart: always

配置好后直接执行 docker-compose up就可以了。通过docker配置非常简单。

镜像拉好启动后会看到docker ps中存在:openstf/stf:latest、rethinkdb、sorccu/adb:latest三个容器。

注意!!!这里有个坑!

由于stf连接手机需要大量(上千个)端口,所以需要把服务器的防火墙端口都打开,否则将无法连接手机!!

(二)连接手机设备

本来连接手机设备这步是直接插上即可,但是在实际操作中会有些问题出现,本节只总结问题:

1. 需要打开手机USB调试

2. 需要打开手机允许模拟位置点击(在开发者模式里)

3. 会自动安装STF Service APP (部分手机需要点击允许)

完成以上三项,就可以从stf的后台中看到对应的手机设备并且操作使用了

需要注意的是,连接STF的手机需要有minicap,否则则无法正常连接。目前已知部分高版本的OPPO/VIVO手机无法连接。如果做群控的话,建议使用小米6左右的机型。

(三)系统角色权限

OpenSTF本身是支持多种身份验证方式的,本节提供比较通用的方式LDAP。它可以无缝接入,并且可以通过LDAP来配置权限

./stf local --public-ip ${ip} --allow-remote --auth-type ldap --auth-options ‘["–ldap-url",“ldap:服务器地址”, “–ldap-bind-dn”,“你的账号”,"–ldap-search-dn",“DC=sunraycn,DC=cn”, “–ldap-bind-credentials”,“ldap密码”, “–ldap-search-class”,“user”, “–ldap-search-field”, “用户信息字段”]’

(四)远程调试

首先需要在STF中注册一个keychan

在你需要连接远程手机的调试电脑上生成一个keychan,然后粘贴过来保存即可。设备处随意填写一个可以记住的名称。

添加好keychan后,我们就可以选择一个手机进行控制,进入后可以看到如下画面:

将红色框框里的远程连接命令copy出来在你的bash中执行即可通过adb远程连接到远程设备了。

当结束调试时记得输入

adb disconnect

来断开远程连接。

注意!!!只有在后台页面中打开手机控制时,才能进行远程调试,否则端口不会打开无法进行调试!!!

(五)远程访问令牌

STF可以通过远程访问令牌来访问系统的API

在STF后台先生成个令牌:

生成后一定记得保存,用于之后的API请求中来使用。

STF常用的API:

1、获取用户信息
Method: GET
URL: http://yourdomain/api/v1/user
Header:
Authorization: Bearer 2a91d54cceb54993a468582041c8c67cadb6116881f84fec825e5111bdcde6c9

2、列出所有STF设备(包括断开连接或其他无法访问的设备)
Method: GET
URL: http://yourdomain/api/v1/devices
Header: Authorization: Bearer 2a91d54cceb54993a468582041c8c67cadb6116881f84fec825e5111bdcde6c9

3、返回有关特定设备的信息
Method:GET
URL:http://yourdomain/api/v1/devices/FA6990313540
Header: Authorization: Bearer 2a91d54cceb54993a468582041c8c67cadb6116881f84fec825e5111bdcde6c9

4、返回有关您自己(经过身份验证的用户)的信息
Method:GET
URL:http://yourdomain/api/v1/user
Header: Authorization: Bearer 2a91d54cceb54993a468582041c8c67cadb6116881f84fec825e5111bdcde6c9

5、返回经过身份验证的用户当前正在使用的设备的列表
Method:GET
URL:http://yourdomain/api/v1/user/devices
Header: Authorization: Bearer 2a91d54cceb54993a468582041c8c67cadb6116881f84fec825e5111bdcde6c9

6、尝试在经过身份验证的用户控制下添加设备。 这类似于在UI中按下“使用”
Method:POST
URL:http://yourdomain/api/v1/user/devices
Header:
(1)Authorization: Bearer 2a91d54cceb54993a468582041c8c67cadb6116881f84fec825e5111bdcde6c9
(2)Content-Type:application/json
Body:{"serial":"521df70f"}

7、从经过身份验证的用户的设备列表中删除设备。 这类似于在UI中按下“停止使用”
Method:DELETE
URL:http://yourdomain/api/v1/user/devices/521df70f
Header:Authorization: Bearer 2a91d54cceb54993a468582041c8c67cadb6116881f84fec825e5111bdcde6c9

8、获取设备远程连接url
Method:POST
URL:http://yourdomain/api/v1/user/devices/521df70f/remoteConnect
Header:Authorization: Bearer 2a91d54cceb54993a468582041c8c67cadb6116881f84fec825e5111bdcde6c9

9、断开设备远程调试会话
Method:DELETE
URL:http://yourdomain/api/v1/user/devices/521df70f/remoteConnect
Header:Authorization: Bearer 2a91d54cceb54993a468582041c8c67cadb6116881f84fec825e5111bdcde6c9

(六)Jenkins集成

Jenkins中有OpenSTF插件可以安装,但是版本比较老了貌似已经没有人维护了

安装后在构建步骤中可以添加STF中空闲的手机进行执行构建内容

(七)App控制

鉴于我们推荐使用Docker的形式来搭建OpenSTF,所以在想针对app进行控制执行一些自动化操作时,可以使用adb来实现。区别于adb debug,可以 通过进入到docker容器内直接调取adb命令,以下是打开微信的示例:

docker exec openstf_adb_1 adb -s $element shell am start com.tencent.mm/com.tencent.mm.ui.LauncherUI

因为STF中会连接多部设备,所以需要通过adb -s 来区分连接哪部设备。当然如果使用jenkins来构建的话,可以直接写个shell来遍历设备id。

同理,可以通过命令行来执行monkey测试、UI自动化测试。

(八)分布式部署STF

STF分布式有2种方案,方案如下:

  • 主节点部署STF服务并允许远程访问API,子节点只需部署ADB,保证ADB 5037端口对外暴露即可。这种方案的优点是部署简单,而且子节点无需部署STF服务。缺点就是子节点新增机器需要在主节点重新运行STF命令以识别子节点上新增的机器。
  • 主节点部署STF服务并允许远程访问API,子节点也部署STF服务并允许远程访问API。然后主节点连接子节点。这种方案的优点是子节点新增设备可以自动识别。缺点就是子节点也需要部署STF服务。

第一种情况,以Window子节点为例

(1)开启ADB,并对外暴露5037端口

adb nodaemon server -a -P 5037

如果出现adb端口被占用的情况,则通过命令查找5037端口占用进程并杀死进程即可。

netstat -aon|findstr 5037
taskkill /pid 5018 /f

(2)到MAC Master主节点运行stf provider命令连接Window子节点

Window的IP为:192.168.27.247,MAC机器IP为:192.168.27.180

stf provider --name GHL.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 900 --public-ip 192.168.27.180 \
--storage-url http://localhost:7100/ \
--adb-host 192.168.27.247 --adb-port 5037 \
--vnc-initial-size 600x800 --mute-master never --allow-remote

上面这么多参数,可以查看Master主节点STF启动日志即可查到,这里主要就是通过新增

--adb-host 192.168.27.247 --adb-port 5037 \

来连接Window机器。

第二种情况,以Linux子节点为例

Linux上部署一个STF服务并运行远程访问API,Linux的IP为:192.168.27.200,MAC机器IP为:192.168.27.180 那么我们只需在Linux上运行stf provider连接Master节点即可,命令如下:

stf provider --name centerOs.local --min-port 7400 --max-port 7700 \
--connect-sub tcp://192.168.27.180:7114 --connect-push tcp://192.168.27.180:7116 \
--group-timeout 20000 --public-ip 192.168.27.180 --storage-url http://192.168.27.180:7100/ \
--vnc-initial-size 600x800 --allow-remote

这里可以看到无需输入adb远程端口,此时Linux节点上插入机器,Master节点就可以实时的查看到Linux上挂载的机器。而无需在Master节点重新输入stf provider命令。

综上总结,OpenSTF还是一个比较通用、简单的开源群控集成工具。

楼主猜测像各大平台的云测试系统就是根据OpenSTF进行二次开发的,当然各大平台的云测系统会有更复杂的任务分发、权限控制及日志回收、报告输出等。

手机群控系统OpenSTF相关推荐

  1. 选择手机群控系统有哪些需要注意的地方?

    随着移动应用的广泛应用,手机群控系统也被广泛应用于各行各业,用户用手机群控系统进行网络推广,软件测试,便捷办公等.面对市场各种类型的手机群控系统,该如何选择呢?小编总结一些行业经验给大家,希望帮助大家 ...

  2. 该如何选择手机群控系统,小白必看,防进深坑。

    该如何选择手机群控系统,小白必看,防进深坑. 群控还有什么好聊的?都是老话常谈了.依然还有人天天问! 百度一搜,各类文章,层出不穷.讲的是那么生动,那么彻底.铺天盖地的营销文案,自我问答,既扮演着老板 ...

  3. 开发手机群控系统(手机网络篇)

    公司最近打算做一个手机群控系统,目的是为了可以远程查看所有手机的情况以及远程执行脚本,此篇文章做一次记录. 手机用的是比较老旧的版本 搭载着 安卓4.4版本,全部没有手机卡,wifi环境也不是特别好. ...

  4. 开发手机群控系统(自动化配置篇)

    开发手机群控系统(手机网络篇) 手机群控系统(补充篇) 上一周把网络问题解决了,这一周准备把自动化设置网络这一块解决掉,否则几十上百台手机的设置, 得累死 这里借助了 uiautomator2 来实现 ...

  5. 泉州群控服务器系统,泉州纵贯手机群控系统 实现一键式按钮服务

    原标题:泉州纵贯手机群控系统 实现一键式按钮服务 当今企业的营销策略都在随着市场的变化而变化着.众多消费者都会因为质量.价格等等原因从线上购买,导致很多商家的市场定位也就从实体店转移到线下+线上双向齐 ...

  6. 群控系统 微信群控系统 手机群控系统 手机群控软件

    新媒体营销领域发展现状 移动互联网的发展改善了企业的业务模式,然而现有的新媒体营销模式难以满足企业的业务需求.在移动互联网发展的大背景下,2016年的新媒体营销行业越来越难做了.企业目前普遍遇到的问题 ...

  7. 手机群控系统(补充篇)

    之前赶出来的群控顺利交付之后,发现一个致命的问题,这个文章记录就记录一些问题和解决方案 2019.12.19  发现手机重启之后 开发者模式会自己关闭,找不到原因,应该是ROM的原因 方案1:修改系统 ...

  8. 龙岩群控服务器系统,别找免root群控系统啦,nbe群控云手机全家桶更实惠

    原标题:别找免root群控系统啦,nbe群控云手机全家桶更实惠 手机群控系统应用范围很广,如手机项目工作室.金融保险行业.培训行业.医疗美容行业等等,用群控可以提高工作效率,降低营销成本. 免ROOT ...

  9. 带你了解手机群控 苹果免越狱群控系统是怎么实现的

    手机群控,其实手机群控这个词你在网上搜集,会发现有很多讨论结果,手机群控系统大家无非想到苹果手机群控,然后就是安卓手机群控,其实不是的,手机群控往往比你们想的要多的多:那么就和大家相互讨论一下手机群控 ...

  10. 微信群控系统制作系列一——java模拟登录网页版微信

    PS:很多人咨询我怎么做手机群控系统,因此我开了个制作群控系统的系列,准备分五期讲解群控系统的制作.前两篇是基础内容. 今天做个简单的java模拟登录网页版微信. 既然要做模拟登录,那么我们一定要了解 ...

最新文章

  1. iOS进阶之atomic一定是线程安全的吗(10)
  2. 自定义listView添加滑动删除功能
  3. java线程学习之notify方法和notifyAll方法
  4. [转]javascript小技巧,超强推荐
  5. 七、Vue cli详解学习笔记——什么是Vue cli ,Vue cli的使用(安装,拉取2.x模板,初始化项目),Vue cli2详解,Runtime-Compiler和Runtime-only区别
  6. java 泛型 加_Java泛型并将数字加在一起
  7. Charles的使用方法
  8. 2004-2020历年美赛优秀论文资源
  9. 基于EEG的睡眠分期算法记录3-使用决策树多类支持向量机的自动睡眠阶段分类
  10. 什么软件可以测试网络的稳定性,手机怎么测试网络稳定性
  11. python #hsv空间中Hue色度/色调在色相环上的角#冷暖色调 在色相环上的范围
  12. PyTorch搭建双向LSTM实现时间序列预测(负荷预测)
  13. vs2013编译ffmpeg之二十六 opus、shine
  14. 【解决方法】浏览器网页界面显示未连接到互联网
  15. 前端开发实习面试题(CSS篇)
  16. dwr的使用和ajax的标签使用 (未读)
  17. PHP全栈学习笔记17
  18. 假如生活欺骗了你--普希金
  19. 【汇编实战开发笔记】从汇编代码中找出一段普通的for循环变成“死循环”的根本原因(RT-Thread技术论坛优秀文章)
  20. sw2urdf插件安装提示

热门文章

  1. 经典软件项目源码汇总
  2. 三菱FX3UFX2NFX1N PLC 模拟器模拟通信功能,模拟PLC实体
  3. CreateThread,_beginthread与AfxbeginThread之间的区别
  4. SaltStack 日志管理
  5. 计算机图形学(裁剪)
  6. 概论-组合最优化问题、计算复杂性和启发式算法概念(现代优化计算方法)
  7. SLAM中位姿估计的图优化方法比较
  8. 鹏城实验室支持建设的OpenI启智社区荣登2021“科创中国”开源创新榜
  9. 控制工程中的数学建模(4)——控制系统时域数学模型建立的一般步骤(之一)
  10. KindEditor上传文件时报500错误