Python3 实现 USB 连接状态自动识别与重连检测
本文介绍在Python3自动化测试中,如何利用ADB命令实时监测USB设备的连接状态。通过对比设备列表变化,实现开测前多设备同时识别等待,以及测试过程中USB意外断开后的自动重连检测与重试逻辑,确保测试流程的稳定性。
USB连接状态检测的应用场景
在进行自动化测试时,经常会遇到需要判断USB设备是否已成功连接的场景。需要注意的是,本文讨论的方法仅适用于通过ADB命令控制手机的情况。
第一种场景出现在测试启动阶段,特别是当需要同时测试多台设备时。为了确保测试能够同步进行,必须等待所有设备的USB连接被系统完全识别。虽然可以打开另一个终端窗口不断执行adb devices命令来手动检测,但这显然不够智能化且效率低下。
第二种场景发生在测试执行过程中。有时USB连接会意外自动断开,如果此时不检测USB是否重新连接,测试脚本仍会继续向下执行,这必然导致测试失败。因此,识别重连状态至关重要。
多设备同时识别的实现逻辑
针对第一种场景,核心思路是利用adb devices命令持续获取当前已连接设备的ID列表。
具体步骤如下:首先获取初始的设备列表devlist,并计算当前已连接的设备数量。
接着,利用while循环不断重新获取设备列表。当新获取的设备数量大于之前的数量时,遍历新设备列表,检查新设备是否不在旧设备列表中。如果是,则打印该设备ID,从而实现对USB连接的实时识别与打印输出。
具体代码实现如下所示:
多设备识别代码示例
import os
from time import sleep
# 获取设备id列表
def getdevlist():
devlist = []
connectfile = os.popen('adb devices')
list = connectfile.readlines()
# print(list)
for i in range(len(list)):
if list[i].find('\tdevice') != -1:
temp = list[i].split('\t')
devlist.append(temp[0])
return devlist
connectdevice = input('请输入每次要同时连接的设备数:')
number = int(connectdevice.strip())
while True:
lists = getdevlist()
devnum = len(lists)
id = 1
tempdevlist = getdevlist()
if devnum < number:
print(f'\n设备未全部识别,应识别{number}台设备!\n当前已识别{devnum}台设备,请连接设备并等待识别:\n\n')
for i in range(devnum):
print(f'设备{id}: {lists[i]}')
id = id + 1
# 等待识别所有设备
while devnum < number:
lists = getdevlist()
curnum = len(lists)
if curnum > devnum:
for i in range(len(lists)):
if lists[i] not in tempdevlist:
print(f'设备{id}: {lists[i]}')
id = id + 1
tempdevlist = getdevlist()
devnum = curnum
print(f'\n所有设备已全部识别!当前有连接{len(getdevlist())}台设备.\n\n')
测试中USB重连的检测与处理
第二种场景的前提是已知当前已连接设备的deviceid。这一信息通常不难获取,其处理思路与第一种情况类似,但我将其封装为一个独立的函数。在实际应用中,偶尔会出现概率性的USB断开后又自动连接的情况,若不处理会导致测试失败。因此,预先掌握这些概率性故障点,并在适当位置加入重连判断逻辑,既能保证代码简洁,又能提高测试的鲁棒性。
重连检测函数示例
import os
from time import sleep
def reconnectAction(deviceid):
devlist = getdevlist()
print(f'设备{deviceid}正在尝试重连.')
id = 1
while deviceid not in devlist:
print(f'第{id}次 ', end = ' ')
devtuple = getdevlist()
id = id + 1
print(f'\n设备{deviceid}重新建立连接成功.')
sleep(1)
# example:
if __name__ == '__main__':
deviceid = '12lk34fkjaaf'
if clickScreen(openfilemanager, deviceid) != 0:
print(f'{openfilemanager[1]}:执行失败‘)
reconnectAction(deviceid)
clickScreen(openfilemanager, deviceid)
至此,功能实现完毕。
以上关于Python3自动识别USB连接状态及重连判断的方法就是全部内容,希望能对读者有所帮助,也欢迎大家多多支持。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













