ATX WiFi 无线拉起执行 APP 稳定性 / 压力测试,免 USB 连线

AppetizerIO for AppetizerIO · 2018年12月07日 · 最后由 敏敏 回复于 2019年01月14日 · 7568 次阅读
本帖已被设为精华帖!

在不插USB的情况下对设备远程操作/启动测试任务一直是一个非常有用的功能,因为公司里的测试设备总是分散的,而且一堆USB线连测试设备总是非常麻烦。ATX项目组提供的 uiautomator2 借助了一系列的工具,使得能够用Python编写自动化脚本,同时可以脚本可以通过WiFi直接操控同WiFi下的设备。另一方面 Maxim 提供了一个非常稳定而且高效的UI全自动话压力/稳定性/遍历测试。两者如果能结合,效果可观。作为同时两个项目的贡献者,分享调和两者的成果以及方案。

背景介绍

uiautomator2有如下组件:

  • PC端运行的Python框架库uiautomator2,写自动化脚本用的,通过HTTP(同网段WiFi)请求让设备端实际执行自动化操作
  • 设备端atx-agent,一个用Go开发的ARM 程序,运行在设备上,进程是adb shell权限,守护其他所有设备端的相关服务进程
  • 设备端android-uiautomator-server,fork自xiaocong,运行在设备上,通过am instrument启动的一个安卓进程,拥有adb shell权限,长连系统的AccessibilityService,并负责自动化操作(基于selector的点击、按钮、输入等);因为是adb shell权限,所以才得以可以操作其他APP(待测APP)
  • 设备端minicap(可选),来自openstf,通过websocket协议提供设备实时的屏幕图像
  • 设备端minitouch(可选),来自openstf,通过websocket可以实时向Android注入屏幕触屏事件(支持复杂路径,多点触摸等)

设备端大管家是atx-agent,必须有adb shell运行权限,保活其他三个,同时是设备端HTTP服务器入口,负责路由HTTP请求给另外三个部件

Maxim有两个组件framework.jarmonkey.jar,都是设备端的,其中framework.jar是一个定制的AccessibilityService,而monkey.jar大改自Google原生monkey,实现遍历逻辑等。一般通过adb shell命令行启动,必须有adb shell(同android-uiautomator-server,这样才能操作其他APP),可以脱机运行(类似nohup),即启动后可以关掉命令行进程不会被杀直到运行完成。

结合方案设计

矛盾点: uiautomator2和Maxim工作时都需要连接系统的AccessibilityService,而AccessibilityService只能单连接;所以启动了uiautomator2才有免USB操作的能力,但是占用了AccessibilityService,如果通过uiautomator2启动Maxim会挂。

经过研究,android-uiautomator-server只是uiautomator2中与selector,click等相关的服务;atx-agent提供执行设备端shell命令的功能(fork,执行,因为fork自atx-agent所以有adb shell权限),所以可以首先启动所有uiautomator2组件待WiFi无线操作可用后,暂时关闭android-uiautomator-server,然后通过atx-agent启动Maxim,执行完成后再通过atx-agent重新拉活android-uiautomator-server恢复uiautomator2的功能,相关片段整理如下:

import uiautomator2 as u2

d = u2.connect('192.168.0.149') # 连接设备
print(d.info)
# 启动前关闭atx-agent守护的uiautomator-server进程
d.service('uiautomator').stop()
# Maxim正常运行
task = d.shell("CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p com.hotbitmapgg.ohmybilibili --running-minutes 2 --throttle 1500 --uiautomatormix --output-directory /sdcard/max-output", stream=True) # stream模式,保证不会timeout导致杀掉,底层上是一个requests库提供的streaming 模式的response
try:
for line in task.iter_lines():
print(line)
finally:
task.close()
print('Done')
# 重新让atx-agent拉活uiautomator-server进程,或者执行下一条需要uiautomator-server的命令也会自行拉活
d.service('uiautomator').start()
d.press('home')
  • 注意:有时候Maxim会跑非常久,并不能保证这个streaming response一直有,所以在实际使用中可以考虑让Maxim跑着,不要求总是获取log输出,然后脚本本身等待或者隔段时间去判断Maxim进程是否结束了

贡献者招募

  • 开源,不是喊一声大神,大神给你免费开放用自己开发的框架,然后要从安装开始教你,Fix你特殊设备的Bug,完成你提的这个那个需求,还给你写文档,完了你就去交KPI了;这不是开源,这是抢劫
  • Maxim作者聊到过,iOS端开源了1年多,没有人贡献过
  • Appium作者来华私聊到,从流量上看到大量中国人在用Appium,但是却没有看到过PR,这是为什么
  • 我们AppetizerIO作为一个使用开源项目的商业产品,取之于社区,还之于社区:用开源工具充实我们的同时,为开源项目 1. 写文档 2. 做GUI配给,集成,项目调和 3. 回答问题处理issue 4. Bugfix, 新feature
  • 独乐了不如众乐乐,开源是精神,不是形式,不是收费就不是开源
    • 大神这个能不能加上 -> 大神我加了个这个,PR review一下
    • 大神没找到文档啊 -> 大神我把xxx这里写了一下,PR了合并一下吧
    • 大神我这个手机上跑不了 -> 大神,我适配了xxx,PR合并一下吧
    • 大神我是小白,这个怎么用啊 -> 大神我是小白看了文档试用了一下,这个是我在TesterHome分享的踩坑贴,有些可以并到README
    • 大神这个是不是一直免费啊 -> 大神我能做什么
  • 最后,感谢我们的贡献者,期待更多真的开源人加入 @codeskyblue @zhangzhao_lenovo
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 17 条回复 时间 点赞

学习中

simple [精彩盘点] TesterHome 社区 2018年 度精华帖 中提及了此贴 01月07日 12:08
安涛 定向班第一期_shell 课程实战_20181216 中提及了此贴 12月21日 16:29

考虑开源?还是商用?

ivy520 定向班第一期_shell 课程实战_20181216 中提及了此贴 12月16日 23:53
ivy520 [该话题已被删除] 中提及了此贴 12月16日 22:55

很想贡献一些力量,但是感觉自己能力所限。

simple 专栏文章:[精华帖] 社区历年精华帖分类归总 中提及了此贴 12月13日 14:44

写的很好,点赞👏

点赞支持一下,很受用👍

AppetizerIO 回复

对,我看你的demo代码也发现了。现在这样就更完美,看来之前的担心会断掉shell是多余哈哈

thanksdanny 回复

基本就是之前讨论的,重点就是启动前关掉uiautomator-server,上次卡在怕server关了shell就没了,结果幸运是atxagent提供的。这脚本是我跑过PoC可用的,正好有时间写了下

浮云 回复

当然,1. 守护,保活 2. 反向代理多个daemon服务,不可能每个service一个port/unixsocket;atx-agent也暴露全功能tty shell,脚本照旧;adb over TCP方案开启也挺麻烦的

太棒了,前天刚聊完文章就出来了!!

设备端atx-agent真有必要?shell脚本后台执行也可以解决同样的需求,网络adb下起后台脚本管理测试执行的过程和具体的调用,shell脚本还能额外开发功能能力。

所以有私有化部署的商业服务在此😁

simple 回复

对 所以 这些云测平台 appetizer也好 领导们 都担心安全和user infomation问题

maxim确实挺不错的,作者也一直在互动更新,答疑解惑。appetizer.io做的东西也很棒,唯一的担心是黑盒使用,对于代码安全性问题有些担心

思寒_seveniruby 将本帖设为了精华贴 12月07日 16:30

开源,不是喊一声大神,大神给你免费开放用自己开发的框架,然后要从安装开始教你,Fix你特殊设备的Bug,完成你提的这个那个需求,还给你写文档,完了你就去交KPI了;这不是开源,这是抢劫
Maxim作者聊到过,iOS端开源了1年多,没有人贡献过
Appium作者来华私聊到,从流量上看到大量中国人在用Appium,但是却没有看到过PR,这是为什么
我们AppetizerIO作为一个使用开源项目的商业产品,取之于社区,还之于社区:用开源工具充实我们的同时,为开源项目 1. 写文档 2. 做GUI配给,集成,项目调和 3. 回答问题处理issue 4. Bugfix, 新feature
独乐了不如众乐乐,开源是精神,不是形式,不是收费就不是开源
大神这个能不能加上 -> 大神我加了个这个,PR review一下
大神没找到文档啊 -> 大神我把xxx这里写了一下,PR了合并一下吧
大神我这个手机上跑不了 -> 大神,我适配了xxx,PR合并一下吧
大神我是小白,这个怎么用啊 -> 大神我是小白看了文档试用了一下,这个是我在TesterHome分享的踩坑贴,有些可以并到README
大神这个是不是一直免费啊 -> 大神我能做什么

😆 😂 😂 😂 😂 😂

就是这么个理儿....
不过 大神都被BAT 360 大厂挖走了 小公司成测开规模上3人规模的都很少....
拿来主义盛行,也是没办法的事....

最后上一图 大家笑笑

做测开好的都去了BAT 要做API UI测开 就要用那些技能稍微不好的 ,但弄的好不好不重要,重要的通过UI API 来找手工业务测试新韭菜!!

先mark 抽空试试

结尾说的挺好

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