WiFi 无线拉起执行 APP 稳定性 / 压力测试,免 USB 连线
Posted TesterHome
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WiFi 无线拉起执行 APP 稳定性 / 压力测试,免 USB 连线相关的知识,希望对你有一定的参考价值。
在不插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.jar
和monkey.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
↙↙↙阅读原文可查看相关链接,并与作者交流
以上是关于WiFi 无线拉起执行 APP 稳定性 / 压力测试,免 USB 连线的主要内容,如果未能解决你的问题,请参考以下文章