Uiautomator项目搭建与实现原理
liuian 2024-12-05 14:28 64 浏览
Uiautomator是Android原生测试框架,可以用于白盒接口测试也可以用于UI自动化测试,Uiautomator分1.0版本与2.0版本,它们都是基于UiAutomation的测试框架,都是通过UiAutomation的接口操作设备, 1.0权限更高,运行更灵活,2.0针对app定制化更高,在同进程内运行,可以获取被测app的运行数据,具体选用哪个框架还是根据业务场景灵活选择。
AndroidStudio基于ant编译Uiautomator1.0 jar包
Uiautomator1.0是基于Java的测试框架,它通过junit和Uiautomator框架执行Java测试用例,但是自从Uiautomator2.0发布以后,官方不再维护Uiautomator1.0的构建。目前无法直接通过Android Studio创建Uiautomator1.0测试项目,本节介绍通过AndroidStudio工具构建Uiautomator1.0 jar文件。
构建项目工程
1.AndroidStudio新构建一普通项目-导入依赖包
2.创建测试类
SDK支持ant编译配置
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/路径下。
根据项目生成build.xml
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
执行测试用例
Uiautomator1.0 的便捷构建
基于ant的Uiautomator1.0 jar包构建是比较麻烦的,并且sdk-tools必须要支持ant编译。那么jar包的组成部分是什么?
通过解压Uiautomator1.0 jar文件,发现jar包主要由.dex文件和META-INF构成,Android 应用apk文件内也包含着两个文件,所以是可以把Uiautomator1.0源码写在普通Android项目中,并用.apk文件替换.jar文件执行测试脚本。
jar包文件构成
apk文件构成
946×448 38.1 KB
构建apk
执行下图Gradle任务,获取打包apk文件
892×702 41.7 KB
任务执行完毕可以得到apk打包文件
898×668 38.7 KB
执行脚本
Uiautomator1.0执行流程解析
下面通过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最终都是通过UiAutomation对象来执行测试动作的。
模拟Uiautomator实现测试服务
特点
系统-已启动其他测试服务时,可以启动服务;
在系统内做服务时可以动态控制测试服务的注册、注销,实现多服务并存;
API功能需自己实现,业务亲和度强
创建测试类MyUiAutomation
844×508 61.2 KB
创建Java接口类,并创建测试连接,调用测试服务方法
构造apk文件并执行
相关推荐
- 电脑下边任务栏跑到左边怎么办
-
电脑桌面的菜单栏从底部跑到左边,想要复原的方法如下:1、鼠标右击“任务栏”空白处,在打开的菜单中点击“属性”2、在弹窗中,找到“屏幕上的任务位置”,在它的右侧点一下倒三角。3、点一下“确定”,接下来就...
- win10关闭防火墙通知(win10关闭防火墙通知怎么关闭)
-
可以关闭防火墙win10提醒。因为win10自带的防火墙会有提醒功能,但有些用户会觉得这个提醒不必要,可以关闭。具体操作步骤是:右键点击Windows徽标,选择“Windows防火墙”,点击“高级设置...
- 微软公司介绍(微软公司介绍文案)
-
微软美国跨国科技公司微软(Microsoft)是一家美国跨国科技企业,1975年4月4日创立。2023财年营收2119.15亿美元,[200]公司总部设立在华盛顿州雷德蒙德(Redmond,邻近西雅图...
- 怎样设置电脑桌面密码(设置电脑桌面密码步骤)
-
首先,需要确定你是想设置电脑屏幕保护密码还是系统登录密码。如果是屏幕保护密码,可以在电脑设置中进行修改。打开控制面板,找到“个性化”或“外观和个性化”选项,再找到“屏幕保护器”选项,点击“设置”,在弹...
- 繁体字输入法下载(繁体字输入法下载安装)
-
你下载百度手机输入法,默认的就是双拼,可以自己选择26键拼音输入01打开苹果手机,找到苹果商城,02打开下载中心,搜索“搜狗输入法”,03下载搜狗输入法,04等下载完成后桌面上会显示搜狗输入法,05然...
- 国产操作系统概念股(国产操作系统概念股票)
-
那么怎么构建该系统呢?一般情况下都是从以下几个方面: 第一、选股方法。虽然靠着均线能选股,靠着指标也能选股,但是系统性的选股方法则是要结合宏观经济整体运行位置和环境,行业发展现状和前...
- 电脑主机开机没反应(电脑主机开机没反应电源灯亮)
-
操作方法01第一种情况是电脑完全没有反应,那么就可能是电源没有连接上,检查插线板和机箱插头,重新插好就好了。?02还有是电脑机箱已经开启,但是显示屏还是黑的,那么这种情况就有可能是显示屏的电源没有连接...
- cad激活码2010(cad激活码和序列号)
-
1.首先激活码出现问题,需要进行激活确认。首先需要的中进入电脑C盘。2.可以先点击组织设置隐藏文件夹显示。3.勾选显示隐藏文件夹。4.找到C:\ProgramData文件夹,打开找到CAD文件夹。5....
- 联想windows7笔记本怎么连接网络
-
检查笔记本的无线网卡驱动1.右键我的电脑,点击“属性”,选择左侧“设备管理器”2.点击“网络适配器”,如果方框内没有驱动,请下载驱动精灵万能网卡版安装网卡驱动 二、若发现驱动前面是感叹号的&...
- 淘宝电脑版网页入口(淘宝网电脑版网页官方)
-
网站地址:https://www.taobao.com/网站链接:进入网站服务器IP:116.253.191.241网站描述:淘宝网首页,淘宝网-亚洲最大、最安全的网上交易平台,提供各类服饰、美容...
- 大学生用哪个牌子的笔记本电脑好
-
荣耀MagicBook14英寸轻薄窄边框笔记本电脑(AMD锐龙58G512GFHDIPS正版Office)冰河银这款的性价比较高。也可以根据自己的预算选同系列其他型号。...
- 免费手机模拟器(免费手机模拟器下载)
-
目前能成功在电脑上模拟苹果系统的iOS模拟器,对比市面上常见的安卓模拟器少太多了,主要原因还是iOS系统比较封闭,难于开发。虽然前面说开发很困难,但是国内还是有一些厉害的IT小组成功推出了iOS模拟器...
- 一周热门
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
