首页
/ 10分钟搭建Android自动化测试框架:Uiautomator2+Pytest实战指南

10分钟搭建Android自动化测试框架:Uiautomator2+Pytest实战指南

2026-02-04 04:43:04作者:郁楠烈Hubert

你还在为Android自动化测试框架搭建繁琐而烦恼?本文将带你从零开始,10分钟内完成Uiautomator2与Pytest的集成,实现高效稳定的UI自动化测试。读完本文你将掌握:环境配置、设备连接、测试用例编写、报告生成全流程,以及解决常见的元素定位超时、测试稳定性问题。

环境准备与安装

核心依赖安装

通过pip快速安装Uiautomator2和Pytest:

pip install -U uiautomator2 pytest

官方安装指南:README.md

设备连接验证

确保Android设备已开启开发者模式并通过USB连接电脑,执行以下命令验证连接:

import uiautomator2 as u2
d = u2.connect() # 自动连接设备
print(d.info) # 输出设备信息如屏幕分辨率、系统版本

成功连接将显示类似:{'displayWidth': 1080, 'displayHeight': 1920, 'sdkInt': 27}的设备信息。

Pytest集成核心配置

测试夹具(Fixure)设计

创建conftest.py文件实现设备初始化与应用管理:

# mobile_tests/conftest.py
import pytest
import uiautomator2 as u2

@pytest.fixture(scope="module")
def d():
    _d = u2.connect()
    _d.settings['operation_delay'] = (0.2, 0.2) # 操作延迟配置
    return _d

@pytest.fixture(scope="function")
def app(d):
    package = "io.appium.android.apis"
    d.app_start(package, stop=True) # 确保应用冷启动
    yield d
    d.app_stop(package) # 测试结束后停止应用

该配置实现:设备自动连接、测试前应用重置、测试后资源清理,确保用例独立性。

测试用例实战

基础操作示例

创建test_simple.py实现元素点击与文本验证:

# mobile_tests/test_simple.py
def test_app_navigation(app):
    d = app
    # 点击"App"分类
    d(text="App").click()
    # 验证跳转成功
    assert d(text="Action Bar").exists

XPath高级定位

使用XPath实现复杂元素定位:

def test_xpath_selector(app):
    d = app
    # 多级菜单导航
    d.xpath("//*[@text='App']/../android.widget.ListView").click()
    # 验证元素存在
    assert d.xpath("//*[contains(@text, 'Alert')]").exists

XPath语法参考:XPATH.md

手势操作示例

实现滑动与长按等手势操作:

def test_swipe_operation(app):
    d = app
    # 向右滑动屏幕
    d.swipe_ext("right", scale=0.8)
    # 长按元素
    d(text="Views").long_click(2) # 长按2秒

测试报告与调试

HTML报告生成

安装pytest-html插件生成可视化报告:

pip install pytest-html
pytest --html=report.html

报告样例:测试报告

调试技巧

开启调试模式查看HTTP请求详情:

d.debug = True # 开启调试
d.info # 执行操作时将打印HTTP请求日志

调试日志将显示元素查找的详细过程,帮助定位定位失败原因。

常见问题解决

元素定位超时

解决方案:增加隐式等待时间

d.implicitly_wait(10) # 全局等待10秒

测试稳定性提升

实现弹窗自动处理:

def test_watcher(app):
    d = app
    # 添加弹窗监控
    d.watcher.when("允许").click()
    d.watcher.start()
    # 执行可能触发弹窗的操作
    d(text="Permissions").click()

高级应用场景

参数化测试

使用@pytest.mark.parametrize实现多组数据测试:

import pytest

@pytest.mark.parametrize("input_text,expected", [
    ("hello", "HELLO"),
    ("world", "WORLD")
])
def test_text_conversion(app, input_text, expected):
    d = app
    d.send_keys(input_text)
    assert d(text=expected).exists

多设备并行测试

通过pytest-xdist实现多设备并行执行:

pytest -n auto # 自动检测CPU核心数并行

设备管理参考:DEVELOP.md

总结与扩展

本文介绍了Uiautomator2与Pytest集成的核心流程,包括环境配置、用例设计、报告生成等关键环节。通过合理运用夹具设计和等待策略,可以有效解决移动端测试常见的稳定性问题。更多高级功能如图像识别、多线程测试可参考:

建议结合实际项目需求,进一步封装基础操作库,构建更高效的测试框架。

点赞+收藏本文,关注后续《Android自动化测试高级实战》系列,深入探讨测试框架设计与持续集成方案。

登录后查看全文
热门项目推荐
相关项目推荐