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.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_lenovoWiFi 无线拉起执行 APP 稳定性 / 压力测试,免 USB 连线 WiFi 无线拉起执行 APP 稳定性 / 压力测试,免 USB 连线 


↙↙↙阅读原文可查看相关链接,并与作者交流



以上是关于WiFi 无线拉起执行 APP 稳定性 / 压力测试,免 USB 连线的主要内容,如果未能解决你的问题,请参考以下文章

微功耗耐高温NB-IOT 无线温度压力传感器管道测温测压力

wifi得宝是啥软件

无线压力传感器信号不稳定接电无输出问题分析

记一次压测中Mysql数据库异常分析过程

下载的app为啥在4G情况下不能登录,在wifi的情况下可用?

求外置 USB无线网卡网络不稳定解决办法