Uiautomator 是 Android 原生测试框架,可以用于白盒接口测试也可以用于 UI 自动化测试,Uiautomator 分 1.0 版本与 2.0 版本,它们都是基于 UiAutomation 的测试框架,都是通过 UiAutomation 的接口操作设备, 1.0 权限更高,运行更灵活,2.0 针对 app 定制化更高,在同进程内运行,可以获取被测 app 的运行数据,具体选用哪个框架还是根据业务场景灵活选择。
Uiautomator1.0 是基于 Java 的测试框架,它通过 junit 和 Uiautomator 框架执行 Java 测试用例,但是自从 Uiautomator2.0 发布以后,官方不再维护 Uiautomator1.0 的构建。目前无法直接通过 Android Studio 创建 Uiautomator1.0 测试项目,本节介绍通过 AndroidStudio 工具构建 Uiautomator1.0 jar 文件。
1.AndroidStudio 新构建一普通项目 - 导入依赖包
Android 最新 SDK 已去除 ant 编译工具支持,如果需要通过 ant 构建 uiautomator1.0 测试包那么就需要下载以前的 sdk-tools,并将该文件复制到本机 sdk 中。
各平台下载地址:
https://dl.google.com/android/repository/tools_r25.2.5-linux.zip
https://dl.google.com/android/repository/tools_r25.2.5-macosx.zip
https://dl.google.com/android/repository/tools_r25.2.5-linux.zip
根据系统版本下载对应的 sdkTools,下载后解压获取 tools 文件夹,并将 tools/文件夹下所有内容复制到本机/sdk/tools/路径下。
1.打开控制台,切换到/sdk/tools/路径下 - 执行命令
2.打开项目,在项目路径下已生成 [build.xml] 文件,打开 [build.xml] 文件,找到如下代码,并注释。
AndroidStudio 导入 ant 任务,并构建
1.打开当前 module 的 Gradle 文件,写入如下代码,然后构建一下 gradle,在 moduleName->Tasks->other 下会列出 ant 任务
2.点击 [ant-build] 即可执行构建任务,等待执行结束后在 [module/bin] 路径下会生成对应的 Apk 文件。
如果构建过程中报 check-env 错误,是因为 sdk-tools 不支持 ant 编译导致的,需要同步一下 sdk-tools
基于 ant 的 Uiautomator1.0 jar 包构建是比较麻烦的,并且 sdk-tools 必须要支持 ant 编译。那么 jar 包的组成部分是什么?
通过解压 Uiautomator1.0 jar 文件,发现 jar 包主要由.dex 文件和 META-INF 构成,Android 应用 apk 文件内也包含着两个文件,所以是可以把 Uiautomator1.0 源码写在普通 Android 项目中,并用.apk 文件替换.jar 文件执行测试脚本。
下面通过 Uiautomator 命令为入口了解 Uiautomator1.0 测试服务是如何运行的,Uiautomator 进程是如何初始化的。
Uiautomator1.0 执行命令结构如下:
Uiautomator 脚本源码则是一个 shell 脚本,通过 app_process 命令加载类
com.android.commands.uiautomator.Launcher
Launcher 作为 uiautomator 进程的入口,解析参数并调用 RunTestCommand 的 run 方法
RunTestCommand.run() 方法将具体的执行业务递交给 UiAutomatorTestRunner 类的 run 方法执行
在 UiAutomatorTestRunner 的 run 方法中初始化执行参数,然后调用 start 方法中初始化 UiAutomationShellWrapper 并执行测试任务。 UiAutomationShellWrapper 的 connect 方法连接系统测试服务。
UiAutomationShellWrapper 类的 connect 方法初始化了 UiAutomation 对象,UiAutomation 提供测试所需功能 API。
到此 uiautomator 进程已经获取 UiAutomation 对象,可以通过 UiAutomation 对象获取屏幕元素信息、发送按键事件、滑动屏幕、点击屏幕等。以下代码展示部分重要 API,无论是 Uiautomator1.0 还是 Uiautomator2.0 最终都是通
*特点: *
1.系统 已启动其他测试服务时,可以启动服务。
2.在系统内做服务时可以动态控制测试服务的注册、注销,实现多服务并存
3.API 功能需自己实现,业务亲和度强。