安卓自动化测试工具怎么选:Appium、UI Automator 与 Espresso

BeePOS LLC  |   |  10 分钟阅读

根据您需要控制的边界选择一个Android自动化测试工具:应用程序拥有的UI、系统和跨应用程序行为、跨平台WebDriver测试或可观察到的真实手机工作流程。

安卓自动化测试工具怎么选:Appium、UI Automator 与 Espresso
安卓自动化测试工具怎么选:Appium、UI Automator 与 Espresso

简短的答案:根据测试边界选择,而不是根据受欢迎程度选择

没有单一最好的Android自动化测试工具。当您的团队拥有应用程序并需要断言靠近其UI代码时,请选择Compose测试或Espresso。当测试必须跨越应用程序边界或与Android系统UI交互时,请选择UI Automator。当WebDriver风格的客户端、几种编程语言或共享的Android和iOS自动化层很重要时,请选择Appium。当审查员必须监视真实手机、识别可见状态、收集屏幕截图或在应用程序的测试代码之外建模操作工作流程时,请添加可观察的视觉流程。

这些工具解决了相同质量问题的不同层级。Android的官方UI测试指南将UI测试定义为启动应用程序、模拟交互并检查其是否正确反应。因此,一个有用的工具选择首先要从测试必须产生的证据、必须跨越的软件边界以及谁将维护它开始。这是一个基于研究的当前官方文档比较,而不是声称一个框架普遍更快或更可靠的基准。

  • App 独有的 View UI:从 Espresso 开始。
  • 应用程序拥有的Jetpack Compose UI:从Compose测试API开始。
  • 系统 UI、权限、多窗口或跨应用程序行为:从 UI Automator 开始。
  • 跨平台WebDriver自动化和语言客户端灵活性:评估Appium。
  • 可视化的黑匣子工作流程、OCR、图像状态和受评论员欢迎的证据:添加一个可视化流程层。

Android自动化测试工具比较

工具或方法最合适的执行边界主要选择器或证据主要权衡
编写测试使用Jetpack Compose构建的应用程序正在测试的应用程序或组件语义、属性、动作、断言需要测试意识的Compose代码和Android测试设置
蒸馏咖啡基于视图的应用程序行为测试正在测试的应用程序查看匹配器、操作、断言不是设计为广泛跨应用程序旅程的主要工具
UI自动化器系统UI、跨应用程序、多窗口、端到端Android路径设备UI和已安装的应用程序可访问性节点、谓词、屏幕截图、应用程序状态Android特定的,通常在Android测试工具链中维护
Appium与UiAutomator2跨平台的WebDriver风格移动自动化客户端到Appium服务器和Android驱动程序WebDriver定位器、功能、驱动程序命令更多可移动部件:服务器、驱动程序、SDK、JDK和设备配置
视觉流动可观察到的真实手机检查和操作工作流程从 app 代码之外可见的设备状态UI树,OCR,模板,图像,屏幕截图,分支不替换设备、组件或仪器断言

该表是边界地图,而不是赢家板。成熟的团队通常将几行组合在一起。Compose屏幕可以进行快速的组件行为测试、用于权限和系统切换的UI Automator路径、与iOS共享的Appium套件和一个小型受监督的真实手机流程,该流程在部署后捕获证据。只有当两个套件以相同的设备成本证明相同的要求时,重复才成为一个问题。

使用 Compose 测试或 Espresso 来测试 app 自身行为。

当团队控制应用程序代码,并且要求是该应用程序内部的语义行为时,编写测试和Espresso是最强大的起点。编写测试API通过语义找到元素,验证属性,执行操作,并与UI同步。Espresso使用视图匹配器、动作和断言用于基于视图的界面,同时阻止从错误的线程直接访问活动和视图,以防止不安全。

与应用程序的这种接近性是有用的。测试可以注入确定性数据,隔离一个组件,断言启用或选定的状态,并以特定的语义原因失败。这也意味着该套件与应用程序的架构和测试构建耦合在一起。当要求属于应用程序时,这种耦合是合适的:会出现验证消息,导航选择正确的目的地,或按钮保持禁用状态,直到存在有效的输入。

选择“编写”测试,当

  • 界面主要由Jetpack Compose组成,并暴露了有用的语义。
  • 您想要具有受控状态的组件级测试以及活动级测试。
  • 空闲同步和特定于Compose的时间控制有助于使断言具有确定性。

选择浓缩咖啡时

  • 该应用程序基于视图或具有需要行为测试的视图屏幕。
  • 该测试可以使用资源 ID 或聚焦匹配器识别一个视图。
  • 要求是在应用程序内部进行互动和陈述,而不是在整个设备范围内进行操作。

使用Android系统的UI自动化器和跨应用程序路径

当Android设备本身是测试边界的组成部分时,UI Automator获胜。现代UI自动化API可以启动应用程序,查找带有谓词的元素,处理权限对话框,等待应用程序可见性或稳定的可访问性树,检查多个窗口,并捕获屏幕截图。这些功能适用于权限提示、设置屏幕、通知、全屏显示、分屏、启动程序行为和在安装的应用程序之间切换的旅程。

重要的区别不是UI Automator只是比Espresso“更强大”。它从不同的位置观察UI。那个外部位置可以看到系统和跨应用程序表面,但它对应用程序内部和测试副本的直接访问较少。将其用于真正需要设备边界的端到端薄路径;将大多数应用程序逻辑保留在更快、更专注的测试中。

这个当前的UI Automator文档还包括内置的条件元素超时、明确的稳定性等待、屏幕截图和结果报告。这些功能减少了依赖固定睡眠的诱惑。文档说明,可访问性树的稳定性并不证明每个后台任务都是空闲的,因此,只要有可用条件,最好的等待仍然是命名的应用程序条件。

当WebDriver风格的移动层很重要时,请使用Appium

当组织想要从JavaScript、Java、Python、Ruby或.NET中获得移动自动化,已经使用WebDriver概念,或希望在一个自动化服务器模型背后获得相关的Android和iOS套件时,Appium是一个强有力的候选人。在Android上,官方UiAutomator2快速启动安装驱动程序,用UiAutomator2自动化名称选择它,并通过Android工具链连接到模拟器或USB调试设备。

这种灵活性确实会带来运营成本。 足够的记录的设置包括Appium服务器、平台驱动程序、Android SDK和平台工具、兼容的JDK、设备准备、功能和客户端依赖项。我们的编辑建议是明确拥有这些版本,并使用驱动程序的医生命令验证设置,而不是维护一个未经记录的笔记本电脑配方。

Appium并不是因为未来可能有iOS套件而自动是最好的选择。如果当前的要求是一个仅限安卓的代码库,并可以深入访问应用程序状态,那么原生安卓测试可能仍然更简单。如果QA平台已经标准化了设备会话、语言客户端、报告和跨平台页面对象,那么Appium的共享模型可以证明额外的层级是合理的。

为可观察到的黑匣子工作流程添加可视流程

当要求存在于一个人可以在真实手机上观察到的内容中,并且工作流程必须在应用程序存储库之外易于理解时,视觉流程很有用。例如,部署后烟雾检查、支持复制、跨第三方应用程序的操作路径、本地化可见文本检查或在状态未知时必须停止的受监督设备任务,这些任务必须以屏幕截图结束。

莱彩 Flow可以结合UI解析、元素查找、轻点、文本输入、等待、分支、有限重复、屏幕截图、OCR、模板匹配、对象检测、子流程和明确的返回或停止行为。这使得决策路径可见:观察一个命名的状态,允许一个动作,验证后置条件,并在失败时保留证据。莱彩 Flow Inside可以运行兼容的配置文件莱彩 Android Agent部署后,但兼容性取决于该配置文件使用的每个节点和资产。

此层应该补充——而不是取代——应用程序原生断言。当可见文本是证据,但UI树无法可靠地显示时,OCR是合适的。模板匹配适用于经过验证的视觉目标。截图对于构图或失败审查很有用。当有源代码时,它们都不能替代业务逻辑单元测试或精确的Compose断言。 足够的安卓视觉测试指南解释如何在这些证据类型之间做出选择。

构建分层的安卓测试策略

  1. 将要求写成可观察到的结果,而不是按键顺序。
  2. 将业务逻辑放在设备 UI 不必要的本地或组件测试中。
  3. 使用 Compose 测试或 Espresso 来测试 app 自身行为和语义断言。
  4. 仅为系统、多窗口、权限或跨应用程序边界添加UI自动化器。
  5. 当其服务器、客户端、报告或跨平台模型提供明确的组织价值时,请使用Appium。
  6. 添加一个视觉化的真实手机流程,以证明代码级套件无法清晰地生成。
  7. 保持每个端到端的路径狭窄,定义一个初始状态,约束每个等待和重试,并在恢复更改它之前捕获失败状态。

一个要求应该有一个主要所有者。例如,表单验证应属于应用程序级别的测试;权限移交应属于UI Automator路径;共享的Android和iOS结账合同可能应属于Appium;发布后真实手机证据运行可能应属于视觉流程。这些层可以引用相同的用户旅程,而无需将每个断言复制到每个框架中。

这个真实手机QA烟雾测试指南展示如何保持部署的检查小巧且可重复性强。 足够的自动停止条件指南涵盖了超时、有限重试、后续条件以及当当前屏幕不再证明下一步操作是合理的时的人工审查。

一个实用的选择清单

疑问如果是的话,请从以下开始
您是否拥有Compose UI,并且需要语义组件或屏幕断言?编写测试
您是否拥有基于视图的用户界面,并需要专注于应用程序内行为测试?蒸馏咖啡
路径必须跨越“设置”、权限、启动程序、窗口或其他应用程序吗?UI自动化器
团队是否需要WebDriver客户端或共享的Android和iOS自动化体系结构?Appium
非开发者是否必须在真实手机上查看可见状态、OCR、图像或屏幕截图?视觉流动
要求主要是业务逻辑,没有设备UI依赖性吗?两者都不适用:使用本地单元测试或集成测试

在采用新框架之前,先创建一个代表性的原型路径,并写下完整的维护表面:测试代码、应用程序钩子、服务器或驱动程序版本、设备重置、测试数据、权限、屏幕截图、日志和CI所有权。最好的工具是能够在团队实际支付的维护成本下产生可信的证据的工具。

Android自动化测试工具常见问题解答

UI Automator和Appium UiAutomator2是一样的吗?

不。UI Automator是一个Android测试库和API.Appium的UiAutomator2驱动程序是Appium平台驱动程序在面向Appium/WebDriver的层背后。尽管名称相关,但它们的设置、客户端模型和维护边界是不同的。

Appium可以取代Espresso或Compose测试吗?

它可以自动化许多相同的可视化旅程,但我们的建议是不要取代每个应用程序级别的测试。编写测试蒸馏咖啡更接近应用程序状态和语义UI行为。当Appium的外部客户端、驱动程序架构或跨平台一致性是要求的一部分时,Appium是最有价值的。

哪种工具最适合测试第三方应用程序?

当您不拥有目标应用程序代码时,UI Automator、Appium或经过审查的黑匣子视觉流程比应用程序内部框架更合适。请确认自动化已获得授权,使用稳定的可观察选择器,避免敏感或破坏性操作,并预计第三方UI更改需要维护。

视觉流程在连续集成中有效吗?

如果设备会话、资产、输入、故障工件和结果界面受到控制,它们可以参与自动化管道。然而,受监督的真实手机工作流程和CI断言框架服务于不同的运营模式。首先决定运行是否必须阻止构建、生成审查证据或协助人员。

选择证明要求的最小的工具边界

从代码附近开始,只有在要求时才会向外扩展。编写测试和Espresso证明应用程序拥有的行为。UI Automator证明了Android系统和跨应用程序路径。Appium提供了一个WebDriver风格的移动自动化层。可视流程添加了可见的真实手机状态、OCR、图像证据和非开发人员可以查看的操作移交。

因此,最强大的安卓自动化策略不是单一工具标准。它是一种有记录的责任分工:每个要求有一个主要断言所有者,在昂贵的边界处进行精细端到端覆盖,明确的停止条件,以及告诉下一个人发生了什么的故障证据。 勘察AI Android自动化莱彩 Flow当可观察的工作流程层与您的用例匹配时。

社论注释:BeePOS有限责任公司,背后公司的莱彩投屏,从以下相关声明旁边的官方Android和Appium文档中研究了此比较。产品部分单独标记,以便读者可以区分文档框架功能和我们自己的工作流程建议。问题或更正可以发送至support@laicaiapp.com。

下载免费版

历史版本 4.2.0: macOSWindows EXE

备注:仅支持安卓手机投屏。