简介

自动化测试中写测试脚本、维护脚本是件苦差事。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 脚本录制相关推荐

  1. android手机评测工具,ADB-Toolkit 测试Android设备入侵Android手机的工具

    ADB-Toolkit是一个BASH脚本,具有28个选项和一个METASPLOIT部分,其中有6个选项,可以在Android 设备中轻松进行渗透测试. 您可以使用此脚本完成任何事情,并测试您的andr ...

  2. Android反编工具的使用-Android Killer

    今天百度搜索"Android反编译"搜索出来的结果大多数都是比較传统的教程.刚接触反编译的时候,我也是从这些教程慢慢学起的.在后来的学习过程中,我接触到比較方便操作的Android ...

  3. android布局优化 工具,详解Android布局优化

    怎样才能写出优秀的Android App,是每一个程序员追求的目标.那么怎么才能写出一个优秀的App呢?相信很多初学者也会有这种迷茫.一句话来回答这个问题:细节很重要.今天我们就从最基础的XML布局来 ...

  4. android文件删除工具下载,Coolmuster Android Cleaner下载

          Coolmuster Android Cleaner官方版是很容易使用且实用性也很高的手机深度缓存清理软件,Coolmuster Android Cleaner最新版能够清除应用程序缓存, ...

  5. Android反编译工具的使用-Android Killer

    今天百度搜索"Android反编译"搜索出来的结果大多数都是比较传统的教程.刚接触反编译的时候,我也是从这些教程慢慢学起的.在后来的学习过程中,我接触到比较方便操作的Android ...

  6. android 数据传递工具,AnyTrans for Android for Mac(安卓手机数据传输工具)

    原标题:AnyTrans for Android for Mac(安卓手机数据传输工具) AnyTrans for Android for Mac是一款好用的安卓手机数据传输工具,全面管理您的iPho ...

  7. android 快速开发工具类,android面试知识点

    项目地址:570622566/FastAndrUtils  简介:android 快速开发工具类 更多:作者   提 Bug   官网 标签: Fastandrutils 是一套整理修改整合的 and ...

  8. android签名文件查看工具,ionic 发布android,并查看签名文件。

    1. 生成android包文件 ionic cordova build android --release 这时候已经cd到你app的目录下面了,然后 2. 生成签名文件 keytool -genke ...

  9. linux gif录制工具,Linux下的GIF录制

    本机OS: Ubuntu 14.04 x64 Windows下录制gif图片的工具很多,Linux下录制的工具比较少 之前一直都是用Android Studio自带的工具录制成视频,也有使用OBS录制 ...

最新文章

  1. Reconstructing complex regions of genomes using long-read sequencingtechnology
  2. feign 请求超时,请求没有到服务端
  3. G7终极2.3.7完美版,黑白分明,值得永久收藏使用
  4. python 调用c++ 回调函数
  5. TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常!...
  6. Visual Studio 2010快捷键大全
  7. [转载] 使用Python+OpenCV实现在视频中某对象后添加图像
  8. Vue2.0组织浏览器返回事件
  9. isset、is_null、empty的区别
  10. 马丁关于id加密验证防攻击
  11. javascript框架echarts插件实现超酷人立方效果图
  12. 全球首个中文PaaS支撑平台----天翎myApps快速开发平台
  13. kettle MongoDB数据迁移至Hbase
  14. 盘一盘 Python 特别篇 18 - 时区|夏令时
  15. 【风马一族_win10设置热点】win10无法开启热点怎么办
  16. 《流浪地球》影评数据爬取分析
  17. 西门子plc视频教程
  18. NovAtel 卫星接收机 718D 数据手册简介
  19. 解决J-LINk下载(sw接线方式)一次就不能下载了的问题
  20. wpf DataGrid主从表,DataGrid嵌套DataGrid主从结构rowdetailtemplate实现,绑定DataTable数据源,使用Visual Studio 2017

热门文章

  1. 高通做服务器芯片有优势吗,为什么高通海思联发科不把芯片面积做的和苹果a系列一样大?性能不就赶上了吗?...
  2. Redis基础数据结构
  3. (转) Dockerfile 中的 COPY 与 ADD 命令
  4. 测试显示富士通UHF RFID亚麻标签可在1.5T及3T的MRI系统内使用
  5. Android执行时ART载入OAT文件的过程分析
  6. spring-102-spring全注解快速实现事务
  7. Kendo UI开发教程(9): Kendo UI Validator 概述
  8. Windows server 2008 R2 个人使用修改==转载+原创
  9. 为什么我要构建这个脚手架
  10. MYSQL数据库与Emoji表情的故事