Python-uiautomator2实战:如何用5分钟搞定Android自动化测试环境搭建

张开发
2026/4/16 16:04:52 15 分钟阅读

分享文章

Python-uiautomator2实战:如何用5分钟搞定Android自动化测试环境搭建
Python-uiautomator2极速指南5分钟构建Android自动化测试环境每次接手新项目时重复的手工测试总让人头疼。上周团队新来的实习生小王为了测试一个简单的登录功能硬是花了整个下午在真机上点点戳戳。看着他疲惫的眼神我决定分享这个能节省90%测试时间的利器——uiautomator2。1. 环境准备从零到一的极速配置开发机建议使用Python 3.7环境这是与uiautomator2兼容性最好的版本。我习惯用conda创建独立环境避免包冲突conda create -n android_test python3.8 conda activate android_testAndroid设备需要开启开发者模式不同品牌手机操作略有差异。以小米手机为例进入设置 → 关于手机 → 连续点击MIUI版本7次返回设置 → 更多设置 → 开发者选项 → 开启USB调试连接电脑时选择文件传输模式注意部分厂商需要额外开启USB安装和USB调试安全设置遇到初始化失败时记得检查2. 核心组件安装与初始化传统Android测试框架需要配置复杂的Java环境而uiautomator2只需要一条命令pip install --upgrade uiautomator2 weditor安装完成后真正的魔法在于初始化命令。这个步骤会自动部署四个关键组件到手机组件名称作用大小atx-agent设备端守护进程2.1MBminicap实时屏幕流传输1.8MBminitouch高性能触控模拟0.5MBuiautomator-apk底层测试框架15.4MB初始化多台设备时推荐使用设备序列号精准控制import uiautomator2 as u2 # 获取所有连接设备 devices u2.list_devices() print(f当前连接设备{devices}) # 指定设备初始化 for serial in devices: u2.init(serial)3. 连接验证与常见问题排查成功初始化后我们可以用这段代码测试环境是否就绪def check_environment(serialNone): try: d u2.connect(serial) if serial else u2.connect() print(设备信息) print(f型号{d.info[model]}) print(f分辨率{d.info[display][width]}x{d.info[display][height]}) return True except Exception as e: print(f连接失败{str(e)}) return False遇到初始化问题时可以按这个流程排查检查adb devices是否能识别设备确认手机已同意USB调试授权尝试重启adbd服务adb kill-server adb start-server查看atx-agent日志adb shell cat /data/local/tmp/atx-agent.log4. 效率提升技巧与实用工具weditor是uiautomator2的视觉化辅助工具安装后运行python -m weditor这个工具可以实时显示手机界面元素树特别适合编写测试脚本时定位元素。我常用的三个快捷键F5刷新界面CtrlS保存当前元素定位表达式CtrlShiftC复制XPath对于团队协作建议将初始化流程封装成Docker镜像FROM python:3.8-slim RUN pip install uiautomator2 \ apt-get update \ apt-get install -y android-tools-adb COPY init_script.py /app/ CMD [python, /app/init_script.py]5. 实战演示从安装到第一个测试用例让我们用5分钟完成一个真实的测试场景——验证微信启动过程import uiautomator2 as u2 import time def test_wechat_launch(): d u2.connect() d.app_stop(com.tencent.mm) # 确保微信初始状态 start_time time.time() d.app_start(com.tencent.mm) d(text微信).wait_exists(10) # 等待主界面出现 if d(text登录).exists: print(测试通过启动耗时{:.2f}秒.format(time.time()-start_time)) else: d.screenshot(error.jpg) raise Exception(微信启动异常)这个简单的例子已经包含了自动化测试的核心要素应用控制、元素等待、状态验证和异常处理。在实际项目中我会进一步封装这些基础操作为公共方法。记得第一次成功运行测试脚本时那种解放双手的愉悦感。现在团队的新功能验证时间从原来的4小时缩短到20分钟更重要的是我们可以把精力集中在设计更全面的测试用例上而不是重复执行机械操作。

更多文章