性能测试工具 使用计算机控制 50 台手机进行 adb 操作,怎么实现?

石头鸟 · 2017年09月20日 · 最后由 Demon 回复于 2019年05月16日 · 7738 次阅读

各位亲,如果想使用一台计算机(型号可以推荐)连接 50 台手机进行 adb 操作,请问怎么选择计算机,构建的过程中要考虑哪些关键点?
PS:现在个人采用 usbhub 只能进行 8 台设备的操作,理论值好像是 127,现实执行不了,请示下!

共收到 42 条回复 时间 点赞

借助 docker 不知道可不可以,没试过

adb 本身就不够稳定,超过一定数量机器扛不住的。

—— 来自 TesterHome 官方 安卓客户端

最近我也在研究这个问题,打算抛弃 adb 了

尝试 ADB 无线连接? adb connect 192.168.1.101:8888

谢答,可能我没有描述清楚,真实是使用一台服务器或者 PC 系统可以是 win 或者 linux 去驱动和控制 20~50 台手机,能检测到所有机器的连接,以及进行任务的分发,比如所有机器同时执行 monkey 等!

可通过无线连接 发送 adb 命令

codeskyblue 回复

抛弃 adb 的话,采用什么方案?

june 回复

手机上启动一个 http 服务,然后电脑通过 wifi 跟手机通讯

codeskyblue 回复

如果 http 服务好的,但是应用卡死了,该如何操作?
如果 http 服务无响应,但是测试仍在进行,该如何操作?
如果索性死机了,怎么检测,怎么操作?
都要拆电池装继电器来控制么?

槽神 回复

死机什么的,就直接标记为失败,交给人工处理

codeskyblue 回复

这……这可是 50 台机器,别闹了好么……楼主很明显想做测试实验室

槽神 回复

说的我好像没有 50 台手机似的

codeskyblue 回复

好吧,你乐意手动就手动吧

抛弃 adb 的话,可以用串口板的,走网络更加不可靠。

—— 来自 TesterHome 官方 安卓客户端

codeskyblue 回复

那有什么好的思路吗?

bauul 回复

谢答,亲不知道你具体方案是怎样的,详细说明下好吗?

Crazyerick 回复

谢答,我觉得可能和 PC 的电源以及 usb 传输带宽限制有关系

如果 PC 的主板总线给 USB 分配的带宽有限,那就尝试多 PC 组网,分布式控制手机:
弄一个 master 控制 PC-A、PC-B……
PC-A 控制手机 1~10
PC-B 控制手机 11~20
……
你看过 jenkins 的 M-S 模式么,命令分发即可

用 docker ,已经有案例支撑了

槽神 回复

是的,但是有个问题,这样的 PC 利用率不高

石头鸟 回复

我也没实践过,只是知道有这么个方案,另外在手机端起 web 服务的方式也是比较靠谱的
据我所知,stf 就是设备管理的,使用 websocket,也有 docker 实现吧
@Lihuazhang
恒温哥来个案例链接👀

石头鸟 回复

利用率不高的问题很好解决,while(i<100000000000000) {i++;}😂

windows 下很不稳定 linux 下目前还没试过

石头鸟 回复

这段日子正在尝试这种无线控制的方案。楼上说的那些 Wifi 稳定性问题,我还真没有遇到过,可能是我的路由器太好了。
安装方面要比 adb install 快了很多,因为用的 Wifi,好一些的手机基本是 10M/s。

挂载这么多设备,供电也是个问题!无线 adb 可以,但是不知道稳不稳定!

小弥勒 回复

淘宝上有卖那种 40 多个口的 usb 充电板的

淘宝搜微信群控就可以搜到大功率的 usb hub

给你个已经验证的思路:
一台 PC 连接 3-5 台 USB HUB,每台手机 通过 usb 线连接到 hub,也就间接连接到 PC 上,按照提示安装驱动,理想状态下 TOP50 机型都能连接到 PC 并且可以通过 adb devices 识别。
手机上安装一个 apk,用作接受服务器传来的 msg,pc 上安装一个 exe,用来与手机上的 apk 保持连接并且传输协议, pc 与 apk 之间通过 socket 或者 http 进行通信;

运行流程大体如下:
PC 上运行模拟器或者其他程序,获得期望的点击、滑动、按键操作等事件,转换成包含操作事件、操作坐标点等信息的 proto,通过 socket 或者 http 发送给手机 apk;
运行在手机的 apk 接受到服务器发来的信息,解析出动作事件和坐标,在本地还原操作,比如进行点击、滑动、按 home 或者电源键之类的。

大体思路就是这样

mark 一下 没试过

服务器本身够强大就多开几个虚拟机 把机子分散开,用无线连接的方式。毕竟那么多机器先要保证稳定不断电都能连上 pc。。不过这样管理起来比较麻烦,其实脑洞开一点还可以自己写个后台控制,把所有虚拟机连接的手机信息 集合到本机上,用这个后台执行脚本或 adb 命令的分发 某台机子 logcat 啥的。我自做过一个局域网内各个主机连接手机执行脚本获取性能数据之类的小工具,应该是可行的,连接的虚拟机尽量用 linux,这样会少出很多幺蛾子。😂 小白不懂太深的技术,只能按自己想法来。

执行 monkey 可以把 log 设置为 5000,然后 log 保存手机?>/storage/sdcard0/all_apk.log 2>&1 &

有个想法,用 usb 带网卡的 hub 连接手机,但是手机得支持 usb host 模式,且需要驱动支持😁,然后在手机端写个 socket 或者 http 服务

槽神 回复

谢谢帅锅,其实我现在就是采用这种方案,如果可以后面准备换高性能服务器去驱动更多手机;

槽神 回复

亲,我想的是一台 PC 最少能驱动 20 台手机,现在最多只能驱动 10 台,所以说利用率不高呢

ycyzharry 回复

目前自测 linux 可以支持 10 台,win 下 8 台

甬力君 回复

我觉得问题在 PC 机的 USB 接口,不是 USBHUB 的问题,测试 usbhub 支持 10 台设备是可以的

Zhhh 回复

亲,目前采用的 PC 机做服务器,性能不强大

codeskyblue 回复

连接了很多手机也出现了各种问题,请问现在你用什么方法呢

自己恢复下,我们通过 8 核 CPU 16GB 内存服务器可以实现该需求,此外通过定制工控机也可以达到同样目的,通过 USBHU 连接 50 台手机

石头鸟 回复

楼主好,
请问你是用 8 核,16GB 的服务器进行了的通过 usbhub 链接 50 台设备么,因为之前尝试过 5 台左右时,识别到设备没问题,但是发测试任务就会只有两台设备运行任务,而且还有延迟,请问这个怎么解决呢,谢谢

我目前也遇到了这个问题 我们是在 ubuntu 上想要连接 11 台设备,但是连接 10 台后,第十一台就不识别了

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