uiautomator2自动化测试系列(一)

作者: TT 分类: 软件测试 发布时间: 2019-04-19 14:23

先说个消息哈:测试架构师小程序上线了,欢迎点击下方二维码体验哈~~

背景介绍

Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作,但有两个缺点:

  1. 只能使用Java语言 ;

  2. 必须每次被上传到设备上运行;

为了解决以上缺点,才有了uiautomator2。uiautomator2是一个Android UI自动化框架,支持Python编写测试脚本对设备进行自动化。

基本原理

uiautomator2的底层是基于Google uiautomator,原理是在手机上运行了一个http服务器,将uiautomator中的功能开放出来,然后再将这些http接口,封装成Python库。(基本要求是Android >= 4.4 Python >=2.7 || <= 3.7)

三言两语不足以表达出工具的强大和许多技巧。下面我们从github上文档来学习,原文地址:https://github.com/openatx/uiautomator2

环境准备及代码思路介绍

安装之前请先确保adb已经安装,并且已添加到环境变量中。

  • 安装更新最新的版本uiautomator2:

pip install --upgrade --pre uiautomator2
  • 拉取github,并安装uiautomator2

git clone https://github.com/openatx/uiautomator2pip install -e uiautomator2

以上两种方式都可以安装,除此之外pillow也是需要的,因为截图功能需要这个模块

pip install pillow

装本库所需要的设备端程序:uiautomator-server、atx-agent、openstf/minicap、openstf/minitouch,通过以下命令:

python -m uiautomator2 init

注:在命令行中启动Python脚本的时候,经常会用到-m参数,那么-m起了什么作用呢?

通过python --help 我们可以看到:

意思是将库中的python模块用作脚本去运行(就是运行包下的__main__.py文件)。那么我们就去__main__.py包中去看下到底做了什么操作,以下是源码的一部分

main函数方法其实很简单,就是接受解析命令行参数,来执行函数,类似shell脚本,我们可以通过python -m uiautomator2 来看看到底有哪些功能

也就是这个MyFire类下面的函数功能

从函数名,我们也就得知了有哪些功能,这里就不多介绍,那么我们再次回归到本次步骤的开头,python -m uiautomator2 init的操作,那么我们来看main主函数的方法

这里接受命令行参数接受的是init ,从代码来看这里是存在有一个私有变量_commadns,可以看到是

这里就执行了cmd_init函数,功能如下

执行了一些初始化操作,也就是开头所讲的安装uiautomator-server、atx-agent,openstf/minicap、openstf/minitouch客户端到终端的操作。

包含一系列的下载并通过adb安装到手机(这里就需要手机开发者权限)

有时候init也会出错,请参考手动Init指南:https://github.com/openatx/uiautomator2/wiki/Manual-Init(这里不做介绍,其实原理就是通过adb安装几个apk...)

  • 安装ui查看器(目前最新的稳定版为 0.1.0)

pip install -U weditor

Windows系统可以使用命令在桌面创建一个快捷方式

 python -m weditor --shortcut

命令行启动 python -m weditor 会自动打开浏览器,输入设备的ip或者序列号,点击Connect即可。

以上是uiautomator2安装环境的配置所有操作。相比于appium是不是“轻量”了很多。你不需要安装node,Android sdk等,也不会因为翻墙安装appium客户端,或者镜像安装等一些系列的操作。当然和最近据说很流行的Airtest,只能说各有千秋吧,待介绍uiautomator2完,将分享airtest。

当我们去用一个框架的时候,必须要知道其原理,最好去看源码了解是怎么实现的,同时,去学习框架的思路。



如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

一条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注