Android UiAutomator 自动化测试 断言函数介绍

本文深入解析Android自动化测试中关键的断言函数使用,包括断言方法详解、equals方法比较、浮点数比较、对象空判断、对象引用比较及错误处理策略,同时提供UiAutomator视频精讲教程,助你全面掌握自动化测试技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一条自动化测试用例,必须包含断言函数,使用断言函数来判断运行是否按照实际运行,是否符合预期效果,判断用例是否通过还是失败






 

assertTrue(String message, boolean condition)   条件为true则通过测试,否则失败并抛出message与AssertionFailedError错误信息
assertTrue(boolean condition)  条件为true则通过测试,否则失败,抛出AssertionFailedError错误信息
assertFalse(String message, boolean condition) 条件为false则通过测试,否则失败并抛出message
assertFalse(boolean condition)  条件为false则通过测试,否则失败,抛出AssertionFailedError错误信息


以下为使用equals()方法
如果期望(expected)和实际(actual)
相等则通过测试
否则失败


assertEquals(String message, Object expected, Object actual)
assertEquals(Object expected, Object actual)
assertEquals(String message, String expected, String actual)
assertEquals(String expected, String actual)
assertEquals(String message, long expected, long actual)
assertEquals(long expected, long actual)
assertEquals(String message, boolean expected, boolean actual)
assertEquals(boolean expected, boolean actual)
assertEquals(String message, byte expected, byte actual)
assertEquals(byte expected, byte actual)
assertEquals(String message, char expected, char actual)
assertEquals(char expected, char actual)
assertEquals(String message, short expected, short actual)
assertEquals(short expected, short actual)
assertEquals(String message, int expected, int actual)
assertEquals(int expected, int actual)


浮点运算不是完全精确的,需要引入精度(delta)来进行比较

如果期望(expected)和实际(actual)
相差不超过精度值(delta)
则通过测试
否则失败

assertEquals(String message, double expected, double actual, double delta)
assertEquals(double expected, double actual, double delta)
assertEquals(String message, float expected, float actual, float delta)
assertEquals(float expected, float actual, float delta)


以下判断对象不为空则通过测试,否则失败并抛出message与AssertionFailedError错误信息

assertNotNull(Object object)
assertNotNull(String message, Object object)

以下判断对象为空则通过测试,否则失败并抛出message与AssertionFailedError错误信息
assertNull(Object object)
assertNull(String message, Object object)


以下  如果期望(expected)和实际(actual)
引用相同的内存对象
则通过测试,否则为失败
assertSame(String message, Object expected, Object actual)
assertSame(Object expected, Object actual)

以下  如果期望(expected)和实际(actual)
引用不同的内存对象
则通过测试,否则为失败
assertNotSame(String message, Object expected, Object actual)
assertNotSame(Object expected, Object actual)


以下 会使用例 立即失败,依据不同的场景使用不同的fail,可用于一些调试的输出,和特殊条件下使用

fail(String message)  立即失败,抛出抛出message与AssertionFailedError错误信息
fail() 立即失败
failSame(String message)   
failNotSame(String message, Object expected, Object actual)
failNotEquals(String message, Object expected, Object actual)



Android 自动化测试UiAutomator 视频精讲,带你详细学习Android 自动化测试
全套视频精讲
https://ke.qq.com/course/274357&from_uin=50745422




<think>好的,我现在需要回答用户关于uiautomator2结合pytest进行自动化测试封装的问题。首先,我应该回忆一下这两个工具的基本概念和它们各自的优势。uiautomator2是Android UI自动化测试框架,支持Python,可以操作设备进行点击、滑动等操作。而pytest是一个功能强大的Python测试框架,提供了丰富的插件和灵活的fixture机制,适合组织测试用例。 接下来,用户可能想知道如何将这两者结合起来进行封装,以提高测试效率和可维护性。因此,我需要分步骤解释封装的思路和关键点。可能需要包括环境搭建、设备初始化、元素封装、测试用例编写、断言机制、报告生成等方面。 首先,环境搭建部分需要说明安装uiautomator2和pytest的步骤,以及设备连接的方法。然后,设备初始化应该提到使用pytest的fixture来管理设备的启动和销毁,这样可以确保每个测试用例前后设备处于正确状态。 元素封装方面,需要强调使用Page Object模式,将页面元素和操作分离,这样当UI变化时只需修改对应页面类,而不影响测试用例。此外,定位元素的策略,比如通过resource-id、text等,也需要提及,可能还要提到如何处理动态元素或等待元素出现的情况。 测试用例编写部分,要结合pytest的特性,如参数化测试、标记用例等,说明如何组织测试用例,使其结构清晰。断言机制需要说明如何利用pytest的断言以及自定义的验证方法,确保测试结果的准确性。 报告生成方面,可以提到使用pytest-html等插件生成测试报告,方便查看结果。另外,异常处理和日志记录也是重要部分,需要在封装时考虑如何捕获异常、记录详细日志,便于问题排查。 可能还需要考虑持续集成,比如将自动化测试集成到Jenkins或GitHub Actions中,定期执行测试。此外,并发测试的问题,比如使用pytest-xdist插件并行执行用例,提高测试效率。 需要注意的是,用户可能对具体的代码示例感兴趣,但根据系统指令,不需要提供代码块,但可以提及关键代码结构。同时,要确保使用中文,并且数学公式或技术术语符合格式要求,比如用$...$包裹行内公式,独立公式用$$...$$,不过在这个问题中可能涉及较少数学公式,但技术名词如类名、方法名可能需要适当处理。 最后,要确保回答结构清晰,分点说明,帮助用户逐步理解整个封装过程,同时保持真实可靠,避免错误信息。可能需要检查是否有遗漏的关键点,比如数据驱动测试、Hook函数的使用、自定义fixture的作用域等。 总结一下,回答的结构应该是先介绍工具,再分步骤讲解封装的关键部分,每个部分详细说明其作用和实现方法,最后提到优化和扩展的可能性,比如持续集成和并发测试。这样用户能够系统地了解如何将uiautomator2和pytest结合起来进行有效的自动化测试封装。</think>以下是对`uiautomator2 + pytest`自动化测试封装的系统化介绍,分步骤说明关键要点: --- ### 1. **工具简介** - **uiautomator2**:基于Android UI的Python测试框架,支持控件定位(如`resource-id`、`text`)、操作(点击、滑动、输入)及断言。 - **pytest**:Python测试框架,提供`fixture`依赖管理、参数化测试、插件扩展(如报告生成)等功能。 --- ### 2. **环境搭建** 1. **安装依赖** ```bash pip install uiautomator2 pytest pytest-html ``` 2. **设备连接** 通过ADB连接设备:`adb devices`,确保设备唯一性。 --- ### 3. **核心封装思路** #### **3.1 设备初始化(Fixture管理)** - 使用`pytest.fixture`管理设备生命周期: ```python import pytest import uiautomator2 as u2 @pytest.fixture(scope="session") def device(): d = u2.connect() # 连接设备 d.app_start("com.example.app") # 启动被测应用 yield d d.app_stop("com.example.app") # 测试结束后关闭应用 ``` - `scope="session"`表示整个测试会话只初始化一次设备。 #### **3.2 页面对象模型(Page Object)** - **封装页面元素与操作**: ```python class LoginPage: def __init__(self, device): self.d = device def input_username(self, text): self.d(resourceId="com.example:id/username").set_text(text) def click_login(self): self.d(resourceId="com.example:id/login_btn").click() ``` - 页面元素通过`resource-id`定位,操作通过方法暴露,实现UI与逻辑分离。 #### **3.3 测试用例编写** - **结合pytest参数化与断言**: ```python import pytest @pytest.mark.parametrize("username, password", [("user1", "pass1"), ("user2", "pass2")]) def test_login(device, username, password): login_page = LoginPage(device) login_page.input_username(username) login_page.input_password(password) login_page.click_login() assert device(text="Welcome").exists() # 验证登录成功 ``` #### **3.4 异常处理与等待** - **隐式等待控件出现**: ```python d(resourceId="com.example:id/btn").wait(timeout=10) # 最多等待10秒 ``` - **捕获异常并截图**: ```python try: d.click(...) except u2.UiObjectNotFoundError: d.screenshot("error.png") pytest.fail("控件未找到") ``` --- ### 4. **测试执行与报告** 1. **命令行执行** ```bash pytest test_cases/ --html=report.html # 生成HTML报告 ``` 2. **并发执行(pytest-xdist)** ```bash pytest -n 4 # 启动4个进程并行测试 ``` --- ### 5. **进阶优化** - **数据驱动**:通过`YAML/JSON`文件管理测试数据。 - **Hook函数**:使用`pytest`的`conftest.py`定义全局前置/后置操作。 - **持续集成**:集成到`Jenkins`或`GitHub Actions`,定时执行测试。 --- ### 6. **优势总结** - **可维护性**:页面对象模型降低UI变动的影响。 - **灵活性**:pytest插件生态支持丰富扩展(如Allure报告)。 - **高效性**:并发执行减少测试耗时。 通过以上封装,可构建稳定、易扩展的Android自动化测试框架。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少不努力老奋斗

鼓励一下,赏根烟抽

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值