关键词:Python、多设备同步运行、Airtest
工作中需要运用到多设备同步运行安卓应用的 unittest 测试脚本。所以写了一个比较简单的小框架,分享给大家。
代码可以在https://github.com/saint228/DreamMultiDevices上取到。
简要说明一下:
项目结构如图

需要事先安装 airtest、pocoui、BeautifulReport、xlwings 等库。在 TestCase 目录下放入你写好的 Unittest 测试脚本。在 config.ini 里配置好你的 app 的包名、安装路径、测试用例范围等参数。
连接好期望同步执行用例的设备以后。从根目录的 start.py 启动,会去 config.ini 里读取设备列表,如果不填则默认读取当前连接的所有设备。
然后根据设备分配进程。

for i in range(len(devicesList)):
     madb=Madb(devicesList[i])
     # 根据设备列表去循环创建进程,对每个进程调用下面的enter_processing/enter_enter_performance方法。
     if madb.get_androidversion()<5:
         print("设备{}的安卓版本低于5,不支持。".format(madb.get_mdevice()))
         continue
     else:
         p1 = Process(target=enter_performance, args=(madb,))
         list.append(p1)
     p2=Process(target=enter_processing, args=(i,madb,))
     list.append(p2)
 for p in list:
     p.start()
 for p in list:
     p.join()

这里会调用 2 个函数:一个 enter_performance 负责性能监测而另一个 enter_processing 负责脚本运行。
先说 enter_processing,该函数负责确保设备连接正常,然后调用 PushApk2Devices 函数,推送 apk 到设备上并运行。再调用 RunTestCase 函数,运行 TestCase 目录里的用例。用例执行完以后,会调用 BeautifulReport 库,每个设备生成一份 html 报告。

而 enter_performance,该函数会根据每个设备创建一个 excel 文件,然后调用一堆 ADB 方法,采集 ADB 的内存、CPU 等参数并同步截图,大概每 4、5 秒采集一次。汇总到 excel 文件里。ADB 性能比较差,有用 UWA、WeTest 等高级货的就不用看这块了。

这个框架是工作闲暇时随性写的,前后断断续续写了两个月吧,根据需求的变动又零零散散加了不少功能,也没写什么注释,可读性比较差。
本人接触 python 不到半年,水平也有限,放到论坛上只是希望能帮到一些苦恼于 app 多设备同步执行的小伙伴,各位大佬勿喷。


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