APP自动化测试工具uiautomator2,十分钟迅速掌握

article/2025/11/5 10:23:18

目录

前言

一、介绍

二、环境部署

三、编写百度贴吧首页脚本

四、uiautomator2和appium运行速度比较

写在最后,给与的建议:


前言

相信很多使用appium做过APP自动化的人都深有感触:

  • appium运行慢、时间长
  • uiautomatorviewer定位元素时得关掉appium server
  • 在低版本的appium上获取toast需要切换automationName

现在有一款自动化测试工具uiautomator2,它几乎完美的避免了以上的问题。简单易学,对新手足够友好。本次我们介绍一下这款工具,让你在十分钟之内能迅速掌握它

一、介绍

uiautomator2是uiautomator的升级版,uiautomator是Google开发的一款用来做安卓自动化测试的Java库,uiautomator2则是将uiautomator中的接口封装成了Python库。因此它支持的语言为Python

优点主要概括如下: 

  • 环境搭建简单方便
  • 执行速度很快
  • UI元素定位便捷好用、可视化好
  • 获取toast非常简单

根据官方文档,要求:

  • Andorid版本 4.4+
  • Python版本 3.6+

二、环境部署

1、安装adb并配置环境变量

这里不做详述,网上的教程很多。安装完查看一下版本信息,能出现具体的版本号说明安装成功

2、安装python的uiautomator2库 

命令:

pip install -U uiautomator2

3、安装atx-agent

这一步的目的是从github上下载atx-agent,推送到手机,作为服务端,因此先要保证adb devices能看到模拟器上的连接。这里开一台夜神模拟器作为演示

开始安装atx-agent,命令:

python-m uiautomator2 init

安装成功后,可以看到模拟器桌面出现一个小汽车图标,这个就是atx.apk

4、安装weditor

命令:

pip install -U weditor

weditor是基于浏览器的UI元素查看器,安装成功后我们做个演示

在命令行输入 weditor 会自动打开浏览器,在页面上输入模拟器的设备序列号,点击Connect,然后点击Dump Hierarchy刷新,可以看到模拟器的界面

打开百度贴吧,弹出隐私政策弹窗,点击UI查看器上的刷新按钮(当然你也可以打开实时,这样会自动刷新),鼠标选中同意,在右边就可以看到一些元素定位方式,如resourceId、Xpath等。是不是很方便,最方便的是它可以在运行的时候,同时开着weditor UI查看器

三、编写百度贴吧首页脚本

这里我们一步一步来,通过编写百度贴吧自动化测试的用例,来说明uiautomator2这个工具提供给我们的一些方法。为了使得代码更直观一点,这里就不使用PO模式了,直接把每一步写在一个模块中

1、先创建一个工程u2-autotest,然后在其下创建一个模块test_tieba.py

2、导入uiautomator2库,取个别名u2,然后使用u2的connect_usb()方法连接,这个方法的参数是设备序列号(可以通过adb devices获取)。连接成功后返回的device对象,我们取名为d,怎么检查有没有连接上?使用d.info能得到设备的基本信息,说明已经连接成功

3、启动指定的app,其语法是:

d.app_start(“指定的包名”)

怎么获取包名,可以打开app,然后打印d.info,得到的结果里的currentPackageName即是包名

4、然后点击百度贴吧,出现的第一个页面就是隐私政策页,打开weditor UI查看器,刷新后鼠标移动到同意按钮上,可以看到有两种定位方式可选择,一种是resourceId,一种是xpath,这里选择resourceId

在uiautomator2里resourceId的定位方式是这样的:

d(resourceId="元素定位表达式")

但是我们想想,能不能直接这样写

答案是否定的,因为启动app后元素控件不会立即出现,因此需要等待时间,在uiautomator2中你可以用强制等待time.sleep(),也可以使用隐性等待implicitly_wait(),这和appium、selenium是一致的。

隐性等待的语法: 

d.implicitly_wait(等待时长)  #单位是s

整理下代码,加上隐性等待时长10s,隐性等待只需要加一次,全局通用。

不管是等待第几个元素,等待时长都是10s,但是如果第一个元素是2s出现,第二个元素是5s出现,那么第一个元素实际等待时长只是2s,第二个只是5s,元素出现就会进行下一步操作,而不像强制等待一直要等够设置的时长。因此隐性等待相对比较节约时间
 

5、点击同意后,我们进入滑屏页面

滑屏操作在uiautomator2中是swipe()方法,和appium类似,sx, ex和sy,ey分别表示起点和终点的坐标

d.swipe(sx, sy, ex, ey, 0.5)

那么起点和终点的坐标如何获取?

为了适应不同的分辨率,可以获取到屏幕的尺寸,然后分别乘以系数。

获取屏幕尺寸的语法是:

d.window_size()

我们看到首页滑动屏幕需要向左滑2次,因此可以写个for循环。这里有几点需要注意下:

  • 为了提高屏幕滑动的稳定性,需要加入强制等待,等待1s
  • 滑动距离尽量大点,比如x轴起点终点可以设置系数分别为0.9, 0.1,如果你设置为0.9,0.5,很可能会出现滑动距离太小,导致没有滑过去的情况
  • uiautomator2还提供了一个扩展的滑动功能,swipe_ext(),不需要坐标,只需提供方向如"left",“right”,“up”,“down”。经过试验,感觉不太稳定,因此还是采用常规的方法

6、滑动到最后一页,点击立即体验,可以进入首页

这里可以使用resourceId或description或xpath,这里演示一下description的使用。

在uiautomator2中description定位的语法是:

d(description="元素定位表达式")

description也称为"content-desc",一般情况下它是唯一的

7、在首页,可以看到左上角有关注、推荐、话题、直播四个栏目,我们选择推荐作为断言的元素

看到推荐有文本值,那uiautomator2支持文本作为元素定位方式吗?

可以的

d(text="元素定位表达式")

然后可以使用get_text()方法拿到文本值,使用assert进行断言

8、一个用例运行完之后,需要停止app并清理环境,这里使用app_stop()和app_clear()方法

d.app_stop('指定的包名')d.app_clear('指定的包名')

这时我们一个完整的用例就写完了,当然为了演示起见,我省略了很多,比如PO模式、pytest、日志、报告等等

四、uiautomator2和appium运行速度比较

这里我更改了下代码,使用uiautomator2和appium同时去执行百度贴吧搜索的用例,步骤一致,等待时长设置一致,看看相同的情况下哪个自动化工具更快点

事实证明,相同情况下,uiautomator2耗时1分钟左右,而appium耗时1分钟16s,比uiautomator2慢了约16s。当然用例越多、流程越长,效果越明显 

最后将uiautomator2的主要语法总结下,更多功能请阅读官方文档:http://8rr.co/Ngbk

自学APP自动化测试的超详细视频

写在最后,给与的建议:

最后,当你想踏入这个行业,给两点小小的建议:

(1)你自己需要考虑清楚,你是否真的喜欢这个行业,起码有足够的热情愿意去钻研?因为IT行业的技术发展非常快,非常不断地学习才能保证在这个行业长久的走下去。如果不喜欢学习新技术,即便进入这个行业,也会很快被淘汰。

(2)互联网行业的高薪资并不会无缘无故地给你,加班是不可避免的事情,需要自己想清楚能否接受这种工作强度。

如果你给出的答案是肯定的话,那么不用再犹豫不决,坚定的走下去,在这个行业在这个岗位,付出定能得到对应的回报。

---------------------------------------------------------------------------------------------

最后,为方便大家自学软件测试,特意给大家准备了一份13G的超实用干货学习资源,涉及的内容非常全面。

包括软件学习路线图,上课视频、8个突击实战项目,60余个软件测试用软件,25份测试文档,55个软件测试相关问题,15篇测试经验级文章,上千份测试真题分享,还有2022软件测试面试宝典,还有软件测试求职的各类精选简历,希望对大家有所帮助…..

 

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

送给大家一句话,共勉:当我们能力不足的时候,首先要做的是内修!当我们能力足够强大的时候,就可以外寻了!


http://chatgpt.dhexx.cn/article/D3cnHvIJ.shtml

相关文章

App测试实战:测试内容、测试工具、测试效果

零、概述 0.1App测试内容: 1、常规的功能和性能:功能遍历、业务响应速度、界面测试等 2、专项测试:主要是 系统指标包括耗电、内存占用、流量消耗、CPU(计算量)、启动速度、流畅度、安装包大小 3、特殊测试&#xff1a…

常用测试工具-----IPOP

1.1、IPOP简介 IPOP软件是一个华为IP工具的集合,最原始的功能是IP地址动态绑定,后续在此基础上不断的进行了扩充,就形成了现在的版本。IPOP是一款实用强大的网络设置工具。 1.2、IPOP用途 在测试过程中,IPOP我主要用到终端工具和…

APP测试工具大全,建议收藏

APP测试工具大全(建议收藏!!!) 一、APP自动化测试工具 AppiumAirtestuiautomator2(python) 二、APP稳定性测试工具 MonkeyMonkeyRunnerMaximUICrawler 三、APP性能测试工具 GTPerfdogSolo…

使用JMeter对网站进行并发测试

1.右击“测试计划”添加“线程组”,并单击新添加的“线程组”设置并发执行次数 2.右击刚才创建的“线程组”添加“HTTP请求” 3.设置“HTTP请求”信息 参数化的信息要和下面创建的“CSV数据文件配置”的“变量名称相同” 4.右击“线程组”添加“CSV数据文件配置…

使用postman进行并发测试

我的postman演示版本 我的接口数据: 1.新建一个文件夹 2.将请求添加进该文件夹 3.选择刚才创建的文件夹,对该文件夹的接口进行并发测试 4.设置并发数和延时时间,点击Run 5.运行结果会依次排序,显示结果状态和耗时 &#xff08…

JM-循环并发测试

由于工作需要,需要模拟一种用户并发使用的场景。首先根据要求,设计测试场景为10用户并发,循环执行五十次。 有了测试场景边在Jm上开始进行测试脚本的编辑一、线程组设置 1.线程组:我们可以将这个字段理解为用户数,及上面提到测试场景里的十个用户,故在这里将线程组设置为…

每天15分钟JMeter入门篇(二):使用JMeter实现并发测试

其他文章 每天15分钟JMeter入门篇(一):Hello JMeter 每天15分钟JMeter入门篇(二):使用JMeter实现并发测试 每天15分钟JMeter入门篇(三):认识JMeter的逻辑控制器 每天15分…

JMeter进行并发测试参数化

文章目录 目录 前言 一、jmeter并发测试流程 二、JMeter配置 1.新建线程组 2.添加HTTP请求 3.添加HTTP信息头管理器 4.HTTP请求body和headers配置 5.添加查看结果数 6.参数化设置 7.并发设置 8.启动,查看结果数 总结 前言 Tips:工作半年多&#x…

JMeter 进行压力测试并发测试步骤,及文件上传并发测试演示

使用 JMeter 进行压力测试 一.前言 压力测试是每一个Web应用程序上线之前都需要做的一个测试,他可以帮助我们发现系统中的瓶颈问题,减少发布到生产环境后出问题的几率;预估系统的承载能力,使我们能根据其做出一些应对措施。所以压…

负载测试,并发测试,压力测试区别

负载测试 1、定义:负载测试是逐渐增加系统负载,测试系统性能的变化,最终确定系统在满足性能指标的情况下所能承受的最大负载的测试。 2、目的:在不挂系统的情况下进行测试,使系统在最大压力下正常运行。 获取系统指标。…

百万tcp并发测试

前言 都说haproxy很牛x, 可是测试的结果实在是不算满意, 越测试越失望,无论是长连接还是并发, 但是测试的流程以及工具倒是可以分享分享。也望指出不足之处。 100w的长连接实在算不上太难的事情,不过对于网上关于测试方法以及测试工具的相关文章实在不甚满意&…

postman进行高并发测试

1、在postman中创建collections,并在collections中创建访问接口并保存 2、点击上方的runner进行参数配置 3、iterations就是同时并发请求数量

并发测试

一、Apache Benchmark ab 命令会创建很多的并发访问线程,模拟多个访问者同时对某一 URL 进行访问,可用来测试 Apache 的负载压力,也可以测试 Web 服务器的压力。 1. 安装 liunx 安装:yum install httpd Windows安装:下…

ApiFox高并发测试用例

介绍 在开发中我们经常会测试高并发场景下的业务,下面来看看如何使用ApiFox编写一个高并发的测试用例 编写接口 第一步我们要编写测试的接口,并且建立一个用例 自动化测试 将上面的测试用例添加到自动化测试中,设置并发参数即可&#xff…

JMeter进行并发测试

下载安装 前提:本地需要安装jdk1.8或以上版本 1、下载地址:https://jmeter.apache.org/download_jmeter.cgi,选择zip包下载。 2、在合适的安装目录解压压缩包,然后配置环境变量。 2.1、新建一个系统变量,变量名称为&am…

接口并发测试

这段时间一直在走流程测试,今天大哥过来,让他看了下我的代码还有点问题,回头还要修改下以前购买商品的帖子,今天先说下接口的并发测试吧,以前都是用Jmeter来做并发测试,今天本来也打算用来着,大…

浅谈并发测试

fiddler并发-多条 步骤: 打上断点找到接口,右键Replay-shiftReissue Requests,弹框填写100点击ok,在列表出现100条url点击go,进行并发 fiddler并发-2条 步骤: 打上断点找到要并发的接口,右…

Jmeter并发测试

什么是并发测试? 并发测试指的是指N个客户端同时发请求给服务器,服务器收到并处理 栗子: 100个人同时在登录QQ,100个人同时使用支付,100个人同时访问淘宝 并发怎么做? 1.添加HTTP请求,意在…

1、并发测试的几种简单方法

文章目录 一、AB二、postman1、添加 Collection2、添加要测试的URL3、选中添加的Collection,设置运行时参数4、结果如下 三、JMeter四、代码模拟五、Testng 并发测试1、注解方式2、配置文件方式 本文介绍几种简单的并发测试方法。 本文分为五部分,即ab、…

Jmeter实现并发测试

在实际测试过程中,需要对某些业务进行并发测试,模拟绝对并发时系统的处理是否有异常。比如支付场景,如果有一些秒杀或者其他优惠活动时,很可能有多用户并发的场景发生,下面就针对支付的并发场景,使用Jmeter…