android 脚本录制工具,[atx 系列] android 脚本录制
简介
自动化测试中写测试脚本、维护脚本是件苦差事。atx 中已有辅助写脚本的 gui 工具和 webide,最近又增加了一个录制生成脚本的辅助工具,这个工具使用起来也比较简单,启动后直接在手机上操作即可,停止录制后,会开启一个 web 服务器来修改完善生成的脚本。
atx 使用了图像识别来做自动化测试,对 android 平台也集成了 uiautomator 可以用 ui 识别。因此这个工具可以生成图像识别语句 +ui 识别语句的混合脚本,而且可以通过提供的 web 服务器很方便地在这两种语句间切换。
使用
先来看一下使用方法吧。
首先需要安装 atx 库
$pip installatx
工具启动同 atx 其他辅助工具类似,用-h 可以看一下帮助信息
$python -m atx record -h
usage: __main__.py record [-h] [-d WORKDIR] [-a NONUI_ACTIVITIES]
optional arguments:
-h, --help show this helpmessage and exit
-d WORKDIR, --workdir WORKDIR
workdir where case & frame files are saved. (default:.)
-a NONUI_ACTIVITIES, --nonui-activity NONUI_ACTIVITIES
nonui-activities forwhich the recorder will analyze
screen image instead of uixml. (default: None)
可以加的参数有:
-d 设置工作目录,默认为当前目录,不过最好设一个值,会自动在当前目录下创建子目录
-a 设置非 ui 识别的 activity,格式为 packageName/ActivityName (例如com.example.demo/.MainActivity), 可以有多个。当检测到当前运行的 activity 在这些里面时,会生成图片识别语句,否则默认生成 ui 识别语句。当然后面是可以调整的。这个设置在游戏测试时会有用,因为游戏一般不能用 ui 识别来做,但游戏里面有些渠道登陆支付之类的是可以用 ui 的。
运行例子,来简单测试一下我手机上的一个软件 “外汇大富翁”:
$python -matx record -d test01
连接手机后,运行上述指令启动,启动后,就可以在手机端操作来生成脚本了。
录制结束后,按 Ctrl+C 停止录制,此时会自动开启 web 服务器来调试修改。界面是这个样子的:
目前可以用来忽略某些步骤、修改 ui 选择或截图区域。
录制过程中的每一步操作的手机状态信息存放在工作目录下的 frames 中,生成的脚本存放在工作目录下的 case 中。
要执行脚本的话,先把手机恢复到初始状态,到 case 目录中执行python script.py就能看到脚本执行了。
生成的脚本样例如下
#-*- encoding: utf-8 -*-
# Generated by recorder.
import time
def test(d):
d.keyevent("KEYCODE_MENU")
d(className=u"android.widget.ImageView").click(timeout=1700)
d.keyevent("KEYCODE_HOME")
d.keyevent("KEYCODE_MENU")
d(className=u"android.widget.ImageView").click(timeout=900)
d(className=u"android.widget.FrameLayout").click(timeout=1200)
d.swipe(961, 832, 503, 829, 10)
time.sleep(1.76)
d.swipe(950, 1231, 515, 1227, 10)
time.sleep(0.57)
d.swipe(982, 1273, 423, 1303, 10)
time.sleep(0.59)
d.swipe(962, 1193, 452, 1221, 10)
time.sleep(0.62)
d.swipe(991, 1223, 361, 1251, 10)
time.sleep(0.83)
d.swipe(965, 1234, 377, 1233, 10)
time.sleep(0.66)
d(className=u"android.widget.FrameLayout", description=u"外汇大富翁").click(timeout=1500)
d(text=u"英雄榜").click(timeout=4700)
d(text=u"账户").click(timeout=1600)
d(text=u"市场").click(timeout=1600)
d(text=u"我的").click(timeout=1800)
d(text=u"自选").click(timeout=1800)
d(className=u"android.widget.ImageView", resourceId=u"com.netease.forextrader:id/search").click(timeout=2200)
d.swipe(577, 1620, 648, 986, 10)
time.sleep(1.96)
d(text=u"确定").click(timeout=2600)
objs = d(className=u"android.widget.TextView", resourceId=u"com.netease.forextrader:id/ratio")
if objs.wait.exists(timeout=3400):
objs[1].click()
d(text=u"1天").click(timeout=2600)
d(text=u"1周").click(timeout=700)
d(text=u"1月").click(timeout=600)
d(text=u"3月").click(timeout=800)
d(text=u"1年").click(timeout=600)
d(className=u"android.widget.ImageView").click(timeout=2000)
d(text=u"英雄榜").click(timeout=3800)
d(text=u"1周").click(timeout=2300)
d(text=u"1月").click(timeout=1200)
d(text=u"累计排名").click(timeout=1400)
d(text=u"常规赛").click(timeout=1500)
d(text=u"挑战赛").click(timeout=1600)
d(text=u"账户").click(timeout=7900)
if __name__ == "__main__":
import atx
d = atx.connect()
test(d)
原理
原理也比较简单,主要有以下几点:
用adb getevent -lt实现用户输入的 hook
自定义的一套简单的手势解析
用 minicap 截屏
用 uiautomator 的 dump 来获取 uixml,并解析 layout 来定位 ui 元素
用户手势识别出来后,会根据发生的时间将当时的手机状态保存起来,录制结束后分析所有操作,根据手势和状态来生成代码
用 tornado 实现的简单的服务器,前端用 vuejs 搭建
说明及后续计划
看上面生成的脚本可以看出,目前自动生成的脚本还是有很多缺点的,比如:
一些繁琐的操作需要手动去合并掉。比如前面的几个 swipe 和点击 “外汇大富翁” 图标的操作,可以合并成d.start_app(...)
没有逻辑结构,例如循环、条件判断等。这些还是离不开测试人员手动添加的
由于 uiautomator 的 dump 时间限制,操作过快时导致 ui 布局文件不能及时更新,因此自动生成的 ui selector 可能有错误
没有统一的清理接口,需要手动清理。
部分脚本不是分辨率无关
后续计划在 web 端增加代码运行调试功能、合并某些操作的功能,有可能的话尝试增加一些逻辑控制以及可以插入额外语句的功能,还有做分辨率无关。
欢迎大家的指导和建议,可以留言或发送到 atx 的gitter中。
参考
android 脚本录制工具,[atx 系列] android 脚本录制相关推荐
- android手机评测工具,ADB-Toolkit 测试Android设备入侵Android手机的工具
ADB-Toolkit是一个BASH脚本,具有28个选项和一个METASPLOIT部分,其中有6个选项,可以在Android 设备中轻松进行渗透测试. 您可以使用此脚本完成任何事情,并测试您的andr ...
- Android反编工具的使用-Android Killer
今天百度搜索"Android反编译"搜索出来的结果大多数都是比較传统的教程.刚接触反编译的时候,我也是从这些教程慢慢学起的.在后来的学习过程中,我接触到比較方便操作的Android ...
- android布局优化 工具,详解Android布局优化
怎样才能写出优秀的Android App,是每一个程序员追求的目标.那么怎么才能写出一个优秀的App呢?相信很多初学者也会有这种迷茫.一句话来回答这个问题:细节很重要.今天我们就从最基础的XML布局来 ...
- android文件删除工具下载,Coolmuster Android Cleaner下载
Coolmuster Android Cleaner官方版是很容易使用且实用性也很高的手机深度缓存清理软件,Coolmuster Android Cleaner最新版能够清除应用程序缓存, ...
- Android反编译工具的使用-Android Killer
今天百度搜索"Android反编译"搜索出来的结果大多数都是比较传统的教程.刚接触反编译的时候,我也是从这些教程慢慢学起的.在后来的学习过程中,我接触到比较方便操作的Android ...
- android 数据传递工具,AnyTrans for Android for Mac(安卓手机数据传输工具)
原标题:AnyTrans for Android for Mac(安卓手机数据传输工具) AnyTrans for Android for Mac是一款好用的安卓手机数据传输工具,全面管理您的iPho ...
- android 快速开发工具类,android面试知识点
项目地址:570622566/FastAndrUtils 简介:android 快速开发工具类 更多:作者 提 Bug 官网 标签: Fastandrutils 是一套整理修改整合的 and ...
- android签名文件查看工具,ionic 发布android,并查看签名文件。
1. 生成android包文件 ionic cordova build android --release 这时候已经cd到你app的目录下面了,然后 2. 生成签名文件 keytool -genke ...
- linux gif录制工具,Linux下的GIF录制
本机OS: Ubuntu 14.04 x64 Windows下录制gif图片的工具很多,Linux下录制的工具比较少 之前一直都是用Android Studio自带的工具录制成视频,也有使用OBS录制 ...
最新文章
- Reconstructing complex regions of genomes using long-read sequencingtechnology
- feign 请求超时,请求没有到服务端
- G7终极2.3.7完美版,黑白分明,值得永久收藏使用
- python 调用c++ 回调函数
- TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常!...
- Visual Studio 2010快捷键大全
- [转载] 使用Python+OpenCV实现在视频中某对象后添加图像
- Vue2.0组织浏览器返回事件
- isset、is_null、empty的区别
- 马丁关于id加密验证防攻击
- javascript框架echarts插件实现超酷人立方效果图
- 全球首个中文PaaS支撑平台----天翎myApps快速开发平台
- kettle MongoDB数据迁移至Hbase
- 盘一盘 Python 特别篇 18 - 时区|夏令时
- 【风马一族_win10设置热点】win10无法开启热点怎么办
- 《流浪地球》影评数据爬取分析
- 西门子plc视频教程
- NovAtel 卫星接收机 718D 数据手册简介
- 解决J-LINk下载(sw接线方式)一次就不能下载了的问题
- wpf DataGrid主从表,DataGrid嵌套DataGrid主从结构rowdetailtemplate实现,绑定DataTable数据源,使用Visual Studio 2017
热门文章
- 高通做服务器芯片有优势吗,为什么高通海思联发科不把芯片面积做的和苹果a系列一样大?性能不就赶上了吗?...
- Redis基础数据结构
- (转) Dockerfile 中的 COPY 与 ADD 命令
- 测试显示富士通UHF RFID亚麻标签可在1.5T及3T的MRI系统内使用
- Android执行时ART载入OAT文件的过程分析
- spring-102-spring全注解快速实现事务
- Kendo UI开发教程(9): Kendo UI Validator 概述
- Windows server 2008 R2 个人使用修改==转载+原创
- 为什么我要构建这个脚手架
- MYSQL数据库与Emoji表情的故事