软件测试|uiautomator2 自动化测试工具使用

简介: 软件测试|uiautomator2 自动化测试工具使用


Google 官方提供了一个 Android 自动化测试工具(Java 库),基于 Accessibility 服务,功能很强,可以对第三方 App 进行测试,获取屏幕上任意一个 App 的任意一个控件属性,并对其进行任意操作,但有两个缺点:
1.测试脚本只能使用 Java 语言;
2.测试脚本要打包成 jar 或者 apk 包上传到设备上才能运行;
实际工作中,我们希望测试逻辑能够用 Python 编写,能够在电脑上运行的时候就控制手机。所以基于这个目的开发了 python-uiautomator2 自动化测试开源工具,其封装了谷歌自带的 uiautomator2 测试框架,可以运行在支持 Python 的任一系统上,目前版本为 V2.10.2。
GitHub 开源地址:
如图所示,python-uiautomator2 主要分为两个部分,python 客户端,移动设备

  • python 端: 运行脚本,并向移动设备发送 HTTP 请求;
  • 移动设备:移动设备上运行了封装了 uiautomator2 的 HTTP 服务,解析收到的请求,并转化成 uiautomator2 的代码;

整个过程:
3.在移动设备上安装 atx-agent(守护进程),随后 atx-agent 启动 uiautomator2 服务(默认 7912 端口)进行监听;
4.在 PC 上编写测试脚本并执行(相当于发送 HTTP 请求到移动设备的 server 端);
5.移动设备通过 WIFI 或 USB 接收到 PC 上发来的 HTTP 请求,执行制定的操作;
使用 pip 安装
安装完成后,使用如下 python 代码查看环境是事配置成功
说明:后文中所有代码都需要导入 uiautomator2 库,为了简化我使用 u2 代替,d 代表 driver
能正确打印出设备的信息则表示安装成功
注意:需要安装 adb 工具,并配置到系统环境变量,才能操作手机。
安装有问题可以到 issue 列表查询:
weditor 是一款基于浏览器的 UI 查看器,用来帮助我们查看 UI 元素定位。
因为 uiautomator 是独占资源,所以当 atx 运行的时候 uiautomatorviewer 是不能用的,为了减少 atx 频繁的启停,就需要用到此工具
使用 pip 安装
查看安装是否成功
出现如下信息表示安装成功
运行 weditor
ui2 支持 android 中 UiSelector 类中的所有定位方式,详细可以在这个网址查看 https://developer.android.com/reference/android/support/test/uiautomator/UiSelector
整体内容如下 , 所有的属性可以通过 weditor 查看到

子元素定位
child()
兄弟元素定位
sibling()
链式调用
相对定位支持在left, right, top, bottom, 即在某个元素的前后左右
表格标注有 @property 装饰的类属性方法,均为下方示例方式

exists 其它使用方法:
info() 输出信息:
可以通过上方信息分别获取元素的所有属性
因为 Java uiautoamtor 中默认是不支持 xpath,这是属于 ui2 的扩展功能,速度会相比其它定位方式慢一些
在 xpath 定位中,ui2 中的 description 定位需要替换为 content-desc,resourceId 需要替换为 resource-id
使用方法
Android<4.3 时不能使用拖动
滑动有两个,一个是在 driver 上操作,一个是在元素上操作
元素上操作
从元素的中心向元素边缘滑动
driver 上操作
即对整个屏幕操作
driver 滑动的扩展方法,可以直接实现滑动,不需要再自己封装定位点
android>4.3
对元素操作
封装好的放大缩小操作
设置 scrollable 属性为 True;
滚动类型:horiz 为水平,vert 为垂直;
滚动方向:

  • forward 向前
  • backward 向后
  • toBeginning 滚动至开始
  • toEnd 滚动至最后
  • to 滚动直接某个元素出现

所有方法均返回 Bool 值;
5.8.1 输入自定义文本
5.8.2 输入按键
两种方法
目前 press 支持的按键如下
keyevent 是通过 “adb shell input keyevent” 方式输入,支持按键更加丰富
更多详细的按键信息 https://developer.android.com/reference/android/view/KeyEvent.html
5.8.3 输入法切换
5.8.4 模拟输入法功能
可以模拟的功能有 go ,search ,send ,next, done ,previous。
如果使用 press 输入按键无效,可以尝试使用此方法输入
使用 wather 进行界面的监控,可以用来实现跳过测试过程中的弹框
当启动 wather 时,会新建一个线程进行监控
可以添加多个 watcher
用法
2.11.0 版本 新增了一个 watch_context 方法 , 写法相比 watcher 更简洁,官方推荐使用此方法来实现监控,目前只支持 click() 这一种方法。
这里可以用来实现图案解锁
使用 touch 类
这个感觉是比较有用的一个功能,可以在测试用例开始时录制,结束时停止录制,然后如果测试 fail。则上传到测试报告,完美复原操作现场,具体原理后面再去研究。
首先需要下载依赖,官方推荐使用镜像下载:
执行录制:
下载与录制视频同一套依赖。
这个功能是首先手动截取需要点击目标的图片,然后 ui2 在界面中去匹配这个图片,目前我尝试了精确试不是很高,误点率非常高,不建议使用。
可以从本地路径及 url 下载安装 APP,此方法无返回值,当安装失败时,会抛出 RuntimeError 异常
默认当应用在运行状态执行 start 时不会关闭应用,而是继续保持当前界面。
如果需要消除前面的启动状态,则需要加 stop=True 参数。
stop 和 clear 的区别是结束应用使用的命令不同
stop 使用的是 “am force-stop”
clear 使用的是 “pm clear”
卸载全部应用返回的包名列表并一定是卸载成功了,最好使用 verbose=true 打印一下信息,这样可以查看到是否卸载成功
或者可以修改一下源码,使其只输出成功的包名,注释的为增加的代码,未注释的是源码
connect() 可以使用如下其它方式进行连接
8.2.1 获取 driver 信息
8.2.2 获取设备信息
会输出测试设备的所有信息,包括电池,CPU,内存等
8.2.3 获取屏幕分辨率
8.2.4 获取 IP 地址
8.3.1 使用 settings 设置
查看 settings 默认设置
修改默认设置,只需要修改 settings 字典即可
8.3.2 使用方法或者属性设置

  • http 默认请求超时时间
  • 当设备掉线时,等待设备在线时长
  • 元素查找默认等待时间
  • 打开 HTTP debug 信息
  • 休眠

value 值参考,只要是元组中的任一一个值就可以。
打开通知栏
打开快速设置
8.7.1 导入文件
8.7.2 导出文件
使用 shell 方法执行
8.8.1 执行非阻塞命令
output 返回的是一个整体的字符串,如果需要抽取值,需要对 output 进行解析提取处理
8.8.2 执行阻塞命令(持续执行的命令)
源码描述
因为有 atx-agent 的存在,Uiautomator 会被一直守护着,如果退出了就会被重新启动起来。但是 Uiautomator 又是霸道的,一旦它在运行,手机上的辅助功能、电脑上的 uiautomatorviewer 就都不能用了,除非关掉该框架本身的 uiautomator
使用代码停止
手动停止
直接打开 ATX APP(init 成功后,就会安装上),点击关闭 UIAutomator
以上,欢迎大家一起交流探讨。

相关文章
|
13天前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
61 8
|
20天前
|
Java 测试技术 数据安全/隐私保护
软件测试中的自动化策略与工具应用
在软件开发的快速迭代中,自动化测试以其高效、稳定的特点成为了质量保证的重要手段。本文将深入探讨自动化测试的核心概念、常见工具的应用,以及如何设计有效的自动化测试策略,旨在为读者提供一套完整的自动化测试解决方案,帮助团队提升测试效率和软件质量。
|
21天前
|
测试技术 持续交付
探索软件测试中的自动化测试策略
随着软件开发周期的加速和市场需求的不断增长,传统的手动软件测试方法已难以满足现代软件开发的高效性和准确性要求。本文旨在探讨自动化测试在软件测试中的重要性、实施策略及其对提高软件质量的影响。通过分析自动化测试的优势与挑战,以及提供实用的自动化测试工具和框架选择指南,旨在帮助读者理解并应用自动化测试以提升软件开发效率和产品质量。
|
20天前
|
机器学习/深度学习 人工智能 监控
软件测试中的自动化测试策略与最佳实践##
在当今快速发展的软件行业中,自动化测试已成为确保软件质量和加速产品上市的关键工具。本文将探讨自动化测试的重要性,分析不同类型的自动化测试工具和框架,并深入讨论实施自动化测试的最佳实践。通过案例研究和数据分析,我们将揭示如何有效整合自动化测试到软件开发生命周期中,以及它如何帮助团队提高测试效率和覆盖率。 ##
31 1
|
13天前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
94 17
Selenium:强大的 Web 自动化测试工具
|
18天前
|
Java 测试技术 API
探索软件测试中的自动化测试框架
本文深入探讨了自动化测试在软件开发中的重要性,并详细介绍了几种流行的自动化测试框架。通过比较它们的优缺点和适用场景,旨在为读者提供选择合适自动化测试工具的参考依据。
|
19天前
|
数据管理 测试技术 持续交付
软件测试中的自动化测试策略与最佳实践
在当今快速迭代的软件开发环境中,自动化测试已成为确保软件质量和加速产品上市的关键手段。本文旨在探讨软件测试中的自动化测试策略,包括选择合适的自动化测试工具、构建有效的自动化测试框架以及实施持续集成和持续部署(CI/CD)。通过分析自动化测试的最佳实践,本文为软件开发团队提供了一系列实用的指南,以优化测试流程、提高测试效率并减少人为错误。
48 4
|
19天前
|
监控 测试技术 定位技术
探索软件测试中的自动化测试框架选择与实施###
本文不概述传统意义上的摘要内容,而是直接以一段对话形式引入,旨在激发读者兴趣。想象一下,你是一名勇敢的探险家,面前摆满了各式各样的自动化测试工具地图,每张地图都指向未知的宝藏——高效、精准的软件测试领域。我们将一起踏上这段旅程,探讨如何根据项目特性选择合适的自动化测试框架,并分享实施过程中的关键步骤与避坑指南。 ###
30 4
|
19天前
|
测试技术 持续交付 数据安全/隐私保护
软件测试的艺术与科学:探索自动化测试框架
在软件开发的世界中,测试是确保产品质量的关键环节。本文将深入探讨自动化测试框架的重要性和实现方法,旨在为读者揭示如何通过自动化测试提升软件测试效率和准确性。我们将从测试的基本概念出发,逐步引导读者了解自动化测试框架的设计和实施过程,以及如何选择合适的工具来支持测试活动。文章不仅提供理论知识,还将分享实用的代码示例,帮助读者将理论应用于实践。无论你是测试新手还是经验丰富的开发者,这篇文章都将为你打开一扇通往更高效、更可靠软件测试的大门。
20 1
|
2月前
|
Java 测试技术 C#
自动化测试之美:从Selenium到Appium
【10月更文挑战第3天】在软件开发的海洋中,自动化测试如同一艘航船,引领着质量保证的方向。本文将带你领略自动化测试的魅力,从Web端的Selenium到移动端的Appium,我们将一探究竟,看看这些工具如何帮助我们高效地进行软件测试。你将了解到,自动化测试不仅仅是技术的展示,更是一种提升开发效率和产品质量的智慧选择。让我们一起启航,探索自动化测试的世界!
下一篇
DataWorks