STF 请教动态分配手机方案

george · 2020年03月16日 · 最后由 Neo 回复于 2020年03月20日 · 3368 次阅读

目标

把手机统一挂载到电脑上,比如 500 台手机挂到 25 台电脑上。通过一台服务器统一管理所有手机的状态。测试电脑需要使用手机,通过该服务器获取手机。
正在使用的手机不会被再次分配

方案 1:STF 方案

通过 STF 方案实现这个功能,测试电脑向 STF 服务器申请手机
问题点 STF 会安装 apk 到手机里面,在给手机做压力测试时,手机会卡或者 kill 后台 apk,导致手机断开,从而导致正在进行的自动化测试无法继续。这个问题无法解决。

方案 2: 完全自己设计

服务器 + provider + 客户端
服务器

  • 只保存当前所有手机的状态到内存,不保存数据库。手机状态包括手机的的 android 版本号,内存,分辨率等本身信息,另外还包括是挂在那台 provider 电脑上,usb 转 TCP 后的地址,是否正在被使用等信息。
  • 服务器提供对外的接口,接收 provider 更新手机信息,接收客户端申请手机,并把手机传给客户端。

provider

  • 通过 adbkit 工具,把手机转换成 tcp,可以给外界连接
  • 电脑每秒钟读取连接的手机信息,并且把信息更新给服务器。
  • 通过 socket 判断手机是否被使用。

客户端

  • 通过服务器获取到可用手机后,通过 adb connect 把手机连接到本地使用

问题点

  • 我已经在公司实现了这套流程,但是不稳定。反复多次插拔手机后,重启电脑等操作后,手机状态不正确,socket 的状态不正确。
  • 服务器代码更新后,必须重启服务器,无法简单地做到无缝更新。这个是给自动化使用的,这样肯定是有问题的。

哪位大牛是否有现成的稳定方案可以推荐?或者这个需求是否有很多人有,起个项目一起开发?

共收到 6 条回复 时间 点赞

openatx 看一下

  • 弃用 adb 吧,adb 本身就不是做这个的,稳定性本身不是很高
  • 像 minicap,minitouch 这些,源码上这些都是 server,forward 出去让外面的 client 来连,改个方式,让他们都变成 client,连外面的 server,这样 server 能集中管理手机。
  • stfservice 这个模式的 apk 还是必须需要的,只不过这个 stfservice 只是一个壳子,动态在 server 端 load dex 或者 jar 来跑。

我目前在改 minicap 和 minitouch,已经完成从 server 改到 client 上了,效果:https://testerhome.com/topics/22525
剩下的 server 端就很好控制了,还未开发完成

Neo 回复

你好,如果不通过 adb 连接,通过您的方案连接,还能在客户端电脑上,通过 adb 命令操作手机吗?毕竟 adb 对手机的操作接口非常多

@george adb shell 只是一个壳子,把命令传进去就可以了,想 pm,am 这些,都可以做

Neo 回复

Neo, 我看您对 adb 的研究非常深入,研究的内容也是比较有水平的,希望能私聊找您进一步请教。如果方便的话,加一下我的微信: george_zhou_2016 ,谢谢啦!

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