利用Python与uiautomator2实现多设备自动化测试
引言
在移动应用测试中,自动化测试是一种提高测试效率和覆盖率的有效手段。本文将介绍如何使用Python语言结合uiautomator2库来实现对多个设备的并行自动化测试。
老规矩先放实现的效果
环境准备
- Python环境
- 安装uiautomator2库:
pip install uiautomator2
- 确保设备已经通过USB调试模式连接到计算机,并且安装了adb工具。
原理解析
多设备并行测试的原理是利用Python的多线程或多进程能力,同时在多个设备上运行测试脚本,从而提高测试效率。
代码解析
1. 获取设备列表
def get_devices_list():
""" 获取手机设备"""
cmd = r'adb devices'
pr = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
pr.wait()
out = pr.stdout.readlines() # 读取命令行输出
devices = []
for i in out[1:-1]: # 忽略第一行和最后一行无用信息
device = str(i).split("\\")[0].split("'")[2] # 提取设备序列号
devices.append(device)
return devices
这个函数使用adb devices
命令获取当前连接的设备列表。通过解析命令的输出,提取出每个设备的序列号。
2. 主要测试函数
def main(device):
d = u2.connect(device)
screen_width = d.info["displayWidth"]
screen_height = d.info["displayHeight"]
print(f'设备serial码:{device} ')
print(f'屏幕宽度x高度:{screen_width} x {screen_height}')
这个函数接收一个设备序列号作为参数,使用uiautomator2库连接到该设备,并获取设备的屏幕宽度和高度信息,然后打印出来。
3. 多进程并行执行
if __name__ == '__main__':
# 进程列表
p_list = []
devices = get_devices_list() # 取得设备列表
for device in devices:
device = Process(target=main, args=(device,)) # 创建进程
p_list.append(device)
for p in p_list:
p.start() # 启动进程
for p in p_list:
p.join() # 等待进程结束
这部分代码是程序的入口点。首先获取所有设备的列表,然后为每个设备创建一个进程,并将main
函数作为目标函数,设备序列号作为参数。接着启动所有进程,并等待它们执行完成。
运行结果
多线程与多进程
Python中的threading
模块可以实现多线程,但由于全局解释器锁(GIL)的存在,多线程在CPU密集型任务中可能不会带来性能上的提升。而multiprocessing
模块可以创建多个进程,每个进程有自己的Python解释器和内存空间,因此适合进行CPU密集型任务的并行处理。
注意事项
- 确保所有设备都连接正常,并且已经开启USB调试模式。
- 确保adb工具可以正常使用,并且设备已经通过adb授权。
- 根据测试需求,可以在
main
函数中添加更多的测试逻辑。
结语
通过本文的介绍,你应该已经了解了如何使用Python结合uiautomator2库来实现多设备的并行自动化测试。这种方法可以显著提高测试效率,特别是在需要对大量设备进行测试时。希望本文对你有所帮助,欢迎在评论区交流更多的自动化测试技巧。