关于软件测试:干货-一文搞定-uiautomator2-自动化测试工具使用

95次阅读

共计 2949 个字符,预计需要花费 8 分钟才能阅读完成。

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…
    整体内容如下 , 所有的属性能够通过 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…
    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
    以上,欢送大家一起交换探讨。
正文完
 0