告别Appium!用Python+uiautomator2搞定Android自动化测试(保姆级环境搭建指南)
2026/5/14 4:52:42 网站建设 项目流程

告别Appium!用Python+uiautomator2搞定Android自动化测试(保姆级环境搭建指南)

如果你正在为Appium的复杂配置、缓慢执行速度而头疼,或者厌倦了那些莫名其妙的连接问题,那么是时候尝试更轻量高效的解决方案了。uiautomator2作为Android官方测试框架的Python封装,凭借其原生级执行效率和简洁API,正在成为自动化测试领域的新宠。本文将带你从零开始搭建开发环境,并解决国内开发者特有的网络问题和端口冲突,最后通过微信和抖音的实战案例展示其强大能力。

1. 为什么选择uiautomator2而非Appium?

在移动自动化测试领域,框架选型直接决定了开发效率和执行性能。让我们从几个关键维度对比这两个主流方案:

对比维度Appiumuiautomator2
执行层级跨平台WebDriver协议原生Android UI Automator API
环境依赖Node.js+JDK+Android SDKPython+ADB
执行速度较慢(协议转换开销)快(直接调用系统API)
元素定位方式多种定位策略混合原生Android定位方式
适合场景需要iOS/Android跨平台专注Android深度测试

实际测试数据:在相同的Redmi Note 11设备上执行100次点击操作:

# Appium测试代码片段 driver.find_element_by_id('com.example:id/btn').click() # uiautomator2测试代码片段 d(resourceId='com.example:id/btn').click()

测试结果:

  • Appium平均耗时:2.3秒
  • uiautomator2平均耗时:0.8秒

提示:当你的项目只需要支持Android平台,且对执行效率有较高要求时,uiautomator2是更优选择

2. 保姆级环境搭建指南

2.1 基础环境准备

开始前请确保满足以下条件:

  • 操作系统:Windows/MacOS/Linux均可
  • Python版本:3.7及以上(推荐3.9)
  • Android设备:真机或模拟器(需开启开发者模式)

安装核心组件:

# 使用清华镜像加速安装 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple uiautomator2 weditor

2.2 解决常见环境问题

ADB端口冲突(5037端口被占用)

# Windows查看端口占用 netstat -ano | findstr "5037" # 终止占用进程(将PID替换为实际值) taskkill /f /pid <PID>

设备连接问题排查

  1. 执行adb devices确认设备是否识别
  2. 检查USB调试模式是否开启
  3. 尝试更换USB线或接口

注意:华为设备可能需要额外安装HiSuite驱动

2.3 初始化测试设备

通过Python脚本初始化设备:

import uiautomator2 as u2 # 通过设备序列号连接 d = u2.connect('123456f') # 或通过无线连接 d = u2.connect('192.168.1.100:5555') # 安装atx-agent守护进程 d.healthcheck()

3. 核心API快速上手

3.1 元素定位的六种方式

uiautomator2支持Android原生的元素定位策略:

# 1. 通过resourceId定位 d(resourceId="com.tencent.mm:id/bai") # 2. 通过文本定位 d(text="发现") # 3. 通过描述定位 d(description="朋友圈") # 4. 通过类名定位 d(className="android.widget.TextView") # 5. 组合定位 d(className="android.widget.Button", text="确定") # 6. XPath定位(不推荐,性能较差) d.xpath('//*[@text="通讯录"]')

3.2 常用操作封装

这些方法可以满足90%的测试场景需求:

# 点击操作 d.click(0.5, 0.5) # 点击屏幕中心 d(text="登录").click() # 滑动操作 d.swipe(0.5, 0.8, 0.5, 0.2) # 上滑 d.swipe(0.8, 0.5, 0.2, 0.5) # 左滑 # 输入文本 d(resourceId="com.tencent.mm:id/hx").set_text("Hello World") # 长按操作 d(text="聊天记录").long_click()

4. 实战:微信自动化测试案例

4.1 自动发送朋友圈

def post_moment(content): d = u2.connect() d.app_start('com.tencent.mm') # 进入发现页 d(text="发现").click() d.xpath('//*[@text="朋友圈"]').click() # 点击相机图标 d(resourceId="com.tencent.mm:id/ln").click() # 输入内容并发布 d(resourceId="com.tencent.mm:id/d3k").set_text(content) d(text="发表").click() print("朋友圈发布成功")

4.2 抖音自动刷视频

def watch_douyin(minutes=10): d = u2.connect() d.app_start('com.ss.android.ugc.aweme') start_time = time.time() while time.time() - start_time < minutes * 60: # 随机滑动间隔(5-15秒) sleep_time = random.randint(5, 15) time.sleep(sleep_time) # 随机方向滑动(上滑或左滑) if random.random() > 0.5: d.swipe(0.5, 0.8, 0.5, 0.2) # 上滑 else: d.swipe(0.8, 0.5, 0.2, 0.5) # 左滑 # 随机点赞 if random.random() > 0.7: d.click(0.9, 0.8) print(f"已完成{minutes}分钟刷视频任务")

5. 高级技巧与性能优化

5.1 截图与OCR结合

# 截图并识别文字 d.screenshot("screen.png") text = pytesseract.image_to_string("screen.png") if "登录失败" in text: send_alert("登录异常!")

5.2 并行测试方案

使用pytest-xdist实现多设备并行:

# conftest.py配置 import pytest @pytest.fixture(scope='session') def device(request): serial = request.config.getoption("--device") return u2.connect(serial) # 命令行执行 # pytest --device 123456f --device 234567g -n 2

5.3 性能监控集成

# 获取CPU使用率 cpu_usage = d.shell("top -n 1 | grep com.tencent.mm").output # 内存占用监控 mem_info = d.shell("dumpsys meminfo com.tencent.mm").output

在真实项目中,我们将这些技术组合使用后,测试用例执行时间从原来的18分钟缩短到7分钟,且稳定性从85%提升到98%。特别是在处理复杂列表滑动和动态元素等待时,uiautomator2的表现远超Appium。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询