两分钟搞懂UiAutomator 1 VS 2测试框架

简介: 两分钟搞懂UiAutomator 1 VS 2测试框架

1. UiAutomator简介

UiAutomator是谷歌在Android4.1版本发布时推出的一款用Java编写的UI测试框架,基于Accessibility服务。其最大的特点就是可以跨进程操作,可以使用UiAutomator框架提供的一些方便的API来对安卓应用进行一系列的自动化测试操作,如点击、滑动、键盘输入、长按以及常用的断言方法等。


要使用该工具,需要满足如下条件:

  • Android SDK Tools, Revision 21 or higher
  • Android SDK Platform, API 18 or higher


 在Android SDK 4.3中提供了如下工具来支持UI自动化测试:

  • uiautomatorviewer – 一个图形界面工具来扫描和分析应用的UI控件。存放在tools目录。

    微信图片_20220524104856.png
  • uiautomator – 一个测试的Java库,包含了创建UI测试的各种API和执行自动化测试的引擎。


微信图片_20220524104925.png


虽然利用Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性(NAF Nodes节点除外),并对其进行任意自动化操作,但却存在两个缺点:

1、测试脚本只能使用Java语言。
2、测试脚本必须每次被上传到设备上运行。


2. UiAutomator2由来

我们从上述可以知道uiautomator库,只能使用Java语言,并且测试脚本需要打包成Jar包上传到设备上才能运行。


但是我们希望测试能够用一个更脚本化的语言,例如Python编写,同时可以每次所见即所得地修改测试、运行测试或者是说能够在电脑上运行就能控制手机。因此基于这种需求背景之下,诞生出来的uiautomator2。


早期,它是由一个名为Xiaocong He的大牛将这个想法实现了出来,实现原理是在手机上运行了一个http rpc服务,将uiautomator中的功能开放出来,然后再将这些http接口封装成Python库。


GitHub项目地址:

https://github.com/xiaocong/uiautomator.git


但由于xiaocong/uiautomator这个库,已经很久不见更新。因此在这个库的基础上,又重新诞生了另外一个加强版本,为了方便做区分原作者在后面加了个2 名为:openatx/uiautomator2


GitHub项目地址:

https://github.com/openatx/uiautomator2.git


该项目除了对原有的库的bug进行了修复外,还增加了很多新的Feature。主要有以下部分:

  • 设备和开发机可以脱离数据线,通过WiFi互联(基于atx-agent)
  • 集成了openstf/minicap达到实时屏幕投频,以及实时截图
  • 集成了openstf/minitouch达到精确实时控制设备
  • 修复了xiaocong/uiautomator经常性退出的问题
  • 代码进行了重构和精简,方便维护
  • 实现了一个设备管理平台(也支持iOS) atxserver2
  • 扩充了toast获取和展示的功能


PS: 目前市面上,常提及的uiautomator2测试框架,大部分指的是openatx/uiautomator2这个了,该框架更详细的介绍,可查阅项目文档。


3. 牛刀小试

1、先准备一台开启了开发者选项的安卓手机,连接上电脑,此处直接打开夜神安卓模拟器。

2、确保执行adb devices可以看到连接上的设备。

微信图片_20220524105021.png


3、运行pip3 install -U uiautomator2 安装uiautomator2

4、运行python3 -m uiautomator2 init安装包含httprpc服务的apk到手机

微信图片_20220524105047.png

上述初始化命令会自动安装本库所需要的设备端程序:uiautomator-server、atx-agent、openstf/minicap、openstf/minitouch,并且在被测手机终端上会安装一个名为ATX的代理程序。

微信图片_20220524105120.png


按照项目文档中的介绍,在之前的版本中,初始化这一步是必须执行的,但是从1.3.0之后的版本,当运行python代码u2.connect()时就会自动推送这些依赖文件了。


5、接下来在做自动化测试之前,需要先查看获取到被测应用控件信息,一般来说,可以借助Android SDK自带的uiautomatorviewer来查看元素,但这要求手机必须以USB的方式连接PC,但openatx项目中提供了另外一个工具weditor 来解决这个问题。


6、安装weditor在线元素查看器。

pip3 install --pre -U weditor


安装好之后,就可以在命令行运行weditor --help 确认是否安装成功了。


7、命令行直接输入 weditor 会自动打开浏览器(http://localhost:17310/),输入设备的ip或者序列号,点击Connect即可。

微信图片_20220524105155.png


8、编写自动化测试脚本,在下述脚本中,通过connect方法连接到指定设备,再通过app_start方法启动被测应用(脚本示例中,打开的是酷狗音乐App),再依次点击登录按钮,以及判断点击登录按钮后,帐号登录页面是否显示,最后关闭酷狗音乐。

import uiautomator2 as u2
d = u2.connect('127.0.0.1:62001')
print(d.info)
d.app_start("com.kugou.android", ".app.splash.SplashActivity")
d(text="登录").click()
d(text="帐号登录").wait(timeout=10.0)
d.app_stop("com.kugou.android")

如果你觉得文章还不错,请大家点赞分享下。你的肯定是我最大的鼓励和支持。


目录
相关文章
|
1天前
|
Web App开发 设计模式 测试技术
python自动化测试实战 —— 自动化测试框架的实例
python自动化测试实战 —— 自动化测试框架的实例
4 0
|
1天前
|
监控 数据可视化 IDE
python自动化测试实战 —— 单元测试框架
python自动化测试实战 —— 单元测试框架
8 2
|
1天前
|
Java 测试技术 数据库连接
【如何学习Python自动化测试】—— Python 的 unittest 框架
【如何学习Python自动化测试】—— Python 的 unittest 框架
4 0
|
2天前
|
敏捷开发 开发框架 自然语言处理
深入理解软件测试中的自动化框架选择
【5月更文挑战第12天】 在现代软件开发周期中,自动化测试已成为确保产品质量和加速市场交付的关键组成部分。选择合适的自动化测试框架对于实现有效的测试策略至关重要。本文将探讨在选择自动化测试框架时应考虑的关键因素,包括框架的可扩展性、易用性、社区支持和集成能力。通过分析比较Selenium、Appium和TestNG等流行框架的特点,本文旨在为读者提供一个清晰的指南,帮助他们根据具体的项目需求做出明智的选择。
|
4天前
|
Java 中间件 测试技术
深入理解自动化测试框架Selenium的设计与实现
【5月更文挑战第10天】 本文旨在深度剖析自动化测试工具Selenium的核心架构与实现机制,通过对其设计理念、组件结构以及在实际软件测试中的应用进行详细解读,使读者能够全面理解Selenium在现代Web应用测试中的重要性和有效性。文章首先介绍Selenium的发展背景及其解决的问题,然后详细探讨其架构设计,包括各种驱动和API的作用,最后结合实际案例分析Selenium如何提高测试效率和准确性。
|
6天前
|
测试技术
测试基础 Junit单元测试框架
测试基础 Junit单元测试框架
11 2
测试基础 Junit单元测试框架
|
6天前
|
Java 测试技术 持续交付
自动化测试框架选型与实战:深入探索与应用
【5月更文挑战第8天】本文探讨了自动化测试框架的选型与实战应用,强调了其在软件质量保障中的重要性。选型原则包括考虑项目需求、技术栈、可扩展性和可维护性,以及社区支持和文档。介绍了Selenium、Appium、JUnit和Pytest等常用框架,并概述了实战应用的步骤,包括明确需求、搭建环境、编写测试用例、执行测试、分析结果、维护代码和持续集成。合理选型与实践能提升测试效率,保障项目成功。
|
9天前
|
敏捷开发 测试技术 持续交付
深入理解自动化测试:框架与实践
【5月更文挑战第5天】 在现代软件开发周期中,自动化测试已成为确保产品质量和加速交付过程的关键环节。本文将深入探讨自动化测试的核心概念、框架选择以及实际实施过程中的最佳实践。通过分析各种自动化测试工具和技术的优缺点,我们旨在为读者提供一种系统化的方法来构建和维护有效的自动化测试环境。
|
9天前
|
机器学习/深度学习 人工智能 自然语言处理
自动化测试中AI驱动的决策框架设计与实现
【5月更文挑战第5天】 在软件测试领域,自动化测试已成为提升测试效率和质量的关键手段。然而,随着软件系统的复杂性增加,传统的自动化测试方法面临挑战,尤其在测试用例的生成、执行及结果分析等方面。本文提出一种基于人工智能(AI)的自动化测试决策框架,旨在通过智能化的算法优化测试过程,并提高异常检测的准确率。该框架结合机器学习和深度学习技术,能够自学习历史测试数据,预测高风险变更区域,自动生成针对性强的测试用例,并在测试执行过程中实时调整测试策略。此外,通过自然语言处理(NLP)技术,该框架还能对测试结果进行语义分析,进一步提供更深入的洞察。本研究不仅增强了自动化测试工具的智能性,也为软件质量保证提
|
14天前
|
数据管理 测试技术
深入理解自动化测试框架:以Selenium为例
【4月更文挑战第30天】 随着软件开发的快速发展,自动化测试已经成为保证软件质量和提升开发效率的重要手段。本文将深入探讨自动化测试框架的核心概念,并以广泛应用的开源工具Selenium为例,解析其架构、原理及在实际项目中的运用。通过实例分析与性能评估,旨在为读者提供一套系统的自动化测试解决方案,并探讨其在复杂应用场景下的优化策略。

热门文章

最新文章