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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/792904.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

评价妙笔生词智能写歌词软件:助力与局限并存

在音乐创作的领域,科技的发展催生了各种创新工具,妙笔生词智能写歌词软件便是其中引人注目的一项。对于这款软件,我们需要以客观和全面的视角来进行评估,因为它既带来了显著的助力,同时也存在不可忽视的局限。 妙笔生…

Iridient Developer:解锁Mac RAW图像处理的极致潜力,打造专业级色彩与细节

Iridient Developer for Mac是一款专为Mac用户设计的RAW图像调整软件,它以其卓越的性能和丰富的功能,赢得了众多摄影师的青睐。以下是对这款软件的详细介绍: 一、强大的RAW图像处理能力 Iridient Developer专为处理RAW图像而设计&#xff0…

JAVA毕业设计146—基于Java+Springboot+vue+uniapp的景区旅游购票小程序(源代码+数据库+9000字论文)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvueuniapp的景区旅游购票小程序(源代码数据库9000字论文)146 一、系统介绍 本项目前后端分离,分为用户、管理员两种角色 1、用户: 注册…

PHP充电桩小程序系统源码

绿色出行新伴侣!充电桩小程序,让充电不再烦恼✨ 🔋 开篇:告别电量焦虑,充电桩小程序来救场! 在这个电动车日益普及的时代,电量不足成了不少车主的“心头大患”。但别担心,充电桩小…

神器!3个免费PPT成品网站推荐+3款AIPPT工具盘点!

熬夜加班做PPT却没有头绪?别再自己憋着想了!现在凡事主打一个“抄作业”,想做ppt却没想法,可以去到ppt成品网站搜集PPT模板,或是使用时下流行的AI生成PPT工具,只需输入PPT主题,即可快速生成一份…

MongoDB教程(二):mongoDB引用shell

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 引言一、MongoD…

为企业提升销售工作效率的工作手机管理系统

在竞争日益激烈的市场环境中,企业的销售团队如同前线战士,其作战效率直接关乎企业的生存与发展。然而,传统销售管理模式下的信息孤岛、沟通不畅、数据混乱等问题,正悄然成为制约销售效率提升的瓶颈。今天,我们为您揭秘…

VR头显如何低延迟播放8K的RTSP|RTMP流

技术背景 我们在做Unity平台RTSP、RTMP播放器的时候,有公司提出来这样的技术需求,希望在头显播放全景的8K RTSP|RTMP直播流,8K的数据,对头显和播放器,都提出了新的要求,我们从几个方面,探讨下V…

mongo数据库迁移

前言 mongo数据库迁移的方式目前常见的有两种: 1,mongodump与mongorestore 2,mongoimport与mongoexport 二者主要区别有: 1、mongoexport 可以导出json和csv格式, mongodump导出的是bson可读性不如前者 2,…

智慧金融-数据可视化

智慧金融-数据可视化 导入所需的库 import numpy as np import numpy_financial as npf import matplotlib.pyplot as plt from pylab import mpl mpl.rcParams[font.sans-serif][FangSong] mpl.rcParams[axes.unicode_minus]False单图曲线图 r 0.05 # 贷款的年利率 n 30…

LeetCode LCR024.反转链表 经典题目 C写法

LeetCode LCR024.反转链表 经典题目C写法 第一种思路🧐: ​ 使用三个指针,n1,n2,n3,n1为空,n2为头结点,n3为头结点的next。开始反转后,n1赋值给n2的next,n2赋值给n1,n3赋…

深入理解FFmpeg--libavformat接口使用(一)

libavformat(lavf)是一个用于处理各种媒体容器格式的库。它的主要两个目的是去复用(即将媒体文件拆分为组件流)和复用的反向过程(以指定的容器格式写入提供的数据)。它还有一个I/O模块,支持多种…

推荐一个比 Jenkins 使用更简单的项目构建和部署工具

最近发现了一个比 Jenkins 使用更简单的项目构建和部署工具,完全可以满足个人以及一些小企业的需求,分享一下。 项目介绍 Jpom 是一款 Java 开发的简单轻量的低侵入式在线构建、自动部署、日常运维、项目监控软件。 日常开发中,Jpom 可以解…

[Linux]基本指令(二)

一些剩下的指令部分 mv指令(重要) mv 命令是 move 的缩写,可以用来移动文件或者将文件改名( move (rename) files ),是 Linux 系统下常用的命令, 经常用来备份文件或者目录。 语法 : mv [ 选项…

前端挑战:Tkinter布局与设计【三种布局】

前端挑战:Tkinter布局与设计【三种布局】 文章目录 前端挑战:Tkinter布局与设计【三种布局】前言Frame 窗口组件代码效果Tkinter的布局grid 网格布局效果展示:代码讲解pack 布局基本使用左右布局place 布局代码预览前言 作为一个前端开发,习惯性的用HTML去解决客户端的问题…

文学式开发工具 Jupyter Notebook

前言:Hello大家好,我是小哥谈。为什么说Jupyter Notebook是文学式开发工具?因为Jupyter Notebook将代码、说明文本、数学方程式、数据可视化图表内容全部组合到一起并显示在一个共享的文档中,可以实现一边写代码一边记录的效果&am…

地理信息科学在交通规划中的应用:GIS绘制智慧出行新蓝图

在当代城市化迅猛发展的背景下,交通规划面临着前所未有的挑战与机遇。作为地理信息与遥感领域的研究者,我深感地理信息科学(GIS)在解决这些问题时扮演着无可替代的角色。本文将深入探讨GIS如何在交通网络分析和优化中发挥核心作用…

Qt:13.多元素控件(QLinstWidget-用于显示项目列表的窗口部件、QTableWidget- 用于显示二维数据表)

目录 一、QLinstWidget-用于显示项目列表的窗口部件: 1.1QLinstWidget介绍: 1.2属性介绍: 1.3常用方法介绍: 1.4信号介绍: 1.5实例演示: 二、QTableWidget- 用于显示二维数据表: 2.1QTabl…

零信任安全新纪元:零信任沙箱的源代码保护策略

在数字世界的战场上,安全防护是每一家企业的生命线。今天,我们要介绍的是一款革命性的安全工具——SDC沙箱,它以零信任的理念为核心,为您的源代码和敏感数据筑起一道坚不可摧的防线。 什么是零信任沙箱? 零信任&…

【开发工具】webStrom2024版-永久使用

1、解压文件 2、安装步骤 先执行unistall-current-user.vbs,确保当前环境变量下没有历史使用记录。再执行install-current-user.vbs。运行的时候,会有第一个弹窗,点击确定,稍微等待一会,会出现 Done 的弹窗&#xff0…