【手机群控】 利用Python与uiautomator2实现

本文涉及的产品
大数据开发治理平台 DataWorks,不限时长
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 3个月
简介: 使用Python的uiautomator2库进行多设备自动化测试,涉及环境准备(Python、uiautomator2、adb连接设备)和代码实现。通过`adb devices`获取设备列表,使用多进程并行执行测试脚本,每个脚本通过uiautomator2连接设备并获取屏幕尺寸。注意设备需开启USB调试并授权adb。利用多进程而非多线程,因Python的GIL限制。文章提供了一种提高测试效率的方法,适用于大规模设备测试场景。

利用Python与uiautomator2实现多设备自动化测试

引言

在移动应用测试中,自动化测试是一种提高测试效率和覆盖率的有效手段。本文将介绍如何使用Python语言结合uiautomator2库来实现对多个设备的并行自动化测试。

老规矩先放实现的效果

image-20240710105613069

环境准备

  • 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函数作为目标函数,设备序列号作为参数。接着启动所有进程,并等待它们执行完成。

运行结果

image-20240710105613069

多线程与多进程

Python中的threading模块可以实现多线程,但由于全局解释器锁(GIL)的存在,多线程在CPU密集型任务中可能不会带来性能上的提升。而multiprocessing模块可以创建多个进程,每个进程有自己的Python解释器和内存空间,因此适合进行CPU密集型任务的并行处理。

注意事项

  • 确保所有设备都连接正常,并且已经开启USB调试模式。
  • 确保adb工具可以正常使用,并且设备已经通过adb授权。
  • 根据测试需求,可以在main函数中添加更多的测试逻辑。

结语

通过本文的介绍,你应该已经了解了如何使用Python结合uiautomator2库来实现多设备的并行自动化测试。这种方法可以显著提高测试效率,特别是在需要对大量设备进行测试时。希望本文对你有所帮助,欢迎在评论区交流更多的自动化测试技巧。

目录
相关文章
|
3月前
|
存储 数据处理 开发工具
用python制作好的软件放手机里
【4月更文挑战第7天】
|
10月前
|
测试技术 API 开发工具
在Python中实现安卓手机自动化
在Python中实现安卓手机自动化
754 0
|
12天前
|
机器学习/深度学习 算法 数据挖掘
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
本文介绍了2023年第二届钉钉杯大学生大数据挑战赛初赛A题的Python代码分析,涉及智能手机用户监测数据分析中的聚类分析和APP使用情况的分类与回归问题。
27 0
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
|
12天前
|
数据采集 机器学习/深度学习 搜索推荐
【2023钉钉杯复赛】A题 智能手机用户监测数据分析 Python代码分析
本文介绍了2023钉钉杯复赛A题的智能手机用户监测数据分析,包括数据预处理、特征提取、推荐模型建立与评价的Python代码实现,旨在通过用户使用记录预测APP使用情况并建立推荐系统。
26 0
【2023钉钉杯复赛】A题 智能手机用户监测数据分析 Python代码分析
|
12天前
|
机器学习/深度学习 算法 数据挖掘
【2023 年第二届钉钉杯大学生大数据挑战赛初赛】 初赛 A:智能手机用户监测数据分析 问题一Python代码分析
本文提供了2023年第二届钉钉杯大学生大数据挑战赛初赛A题"智能手机用户监测数据分析"的Python代码分析,包括数据预处理、特征工程、聚类分析等步骤,以及如何使用不同聚类算法进行用户行为分析。
25 0
【2023 年第二届钉钉杯大学生大数据挑战赛初赛】 初赛 A:智能手机用户监测数据分析 问题一Python代码分析
|
12天前
|
数据采集 Python
[python]爬取手机号码前缀和地区信息
[python]爬取手机号码前缀和地区信息
|
3月前
|
数据采集 数据挖掘 开发者
手机使用Python轻松下载闲鱼短视频
手机使用Python轻松下载闲鱼短视频
75 0
手机使用Python轻松下载闲鱼短视频
|
3月前
|
监控 安全 数据挖掘
AidLearning:手机端Python编程的神器
AidLearning:手机端Python编程的神器
67 0
|
JavaScript 前端开发 iOS开发
Python 模仿按键精灵,批量验证和添加手机号码为企业微信账号的联系人
Python 模仿按键精灵,批量验证和添加手机号码为企业微信账号的联系人
316 0
|
网络协议 Shell Linux
用python控制您的安卓手机
用python控制您的安卓手机
444 0
用python控制您的安卓手机