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

简介: 使用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库来实现多设备的并行自动化测试。这种方法可以显著提高测试效率,特别是在需要对大量设备进行测试时。希望本文对你有所帮助,欢迎在评论区交流更多的自动化测试技巧。

目录
相关文章
|
8月前
|
API 数据安全/隐私保护 开发者
企业微信自动加好友软件,导入手机号批量添加微信好友,python版本源码分享
代码展示了企业微信官方API的合规使用方式,包括获取access_token、查询部门列表和创建用户等功能
|
8月前
|
存储 API 数据库
自动发短信的软件,批量自动群发短信,手机号电话号生成器【python框架】
这个短信群发系统包含以下核心功能: 随机手机号生成器(支持中国号码) 批量短信发送功能(使用Twilio API)
|
8月前
|
API 数据安全/隐私保护 Python
批量发短信的软件,自动群发短信批量工具,手机号电话生成脚本插件【python】
该工具包含三个核心模块:短信发送核心功能、配置管理系统和命令行界面。使用时需先配置API密钥和短信模板
|
存储 算法 API
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
2247 82
|
8月前
|
机器人 测试技术 API
自动加好友软件手机免费版,无限制qq自动加人软件,python脚本插件分享
这个示例仅展示了基础的网页自动化测试原理,实际平台都有完善的反自动化机制。建议学习正规
|
机器学习/深度学习 算法 数据挖掘
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
本文介绍了2023年第二届钉钉杯大学生大数据挑战赛初赛A题的Python代码分析,涉及智能手机用户监测数据分析中的聚类分析和APP使用情况的分类与回归问题。
459 0
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
|
存储 API 数据安全/隐私保护
【02】整体试验思路,在这之前我们发现sec_uid,sec_uid是什么和uid的关系又是什么?相互如何转换?python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
【02】整体试验思路,在这之前我们发现sec_uid,sec_uid是什么和uid的关系又是什么?相互如何转换?python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
1744 6
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。
|
Android开发 Python
uiautomator2:python控制手机的神器
uiautomator2:python控制手机的神器
542 0
|
Android开发 Swift iOS开发
python 基于电脑蓝牙连接获取手机的实时数据
python 基于电脑蓝牙连接获取手机的实时数据
484 0

推荐镜像

更多