UI自动化
*****UI框架是什么*****
模拟用户操作的工具,就像真正的用户在操作一样
主要功能:测试你的应用是否能很好的工作在手机平台上
回归测试检验软件功能和用户需求
常用移动端UI测试框架:
已经有这么多测试框架,为何还要重复造轮子?
UI自动化的简单原理:连接测试设备,获取页面元素,解析页面元素,发送对应事件,执行测试完毕
1、简单:使用够简单,无需配置运行环境
2、稳定:无依赖,断开可重连
3、高效:因为够简单,极易扩展开发
*****梳理框架*****
UI测试框架最重要的核心是什么?
丰富的Api:可模拟人类的动作事件
动作类:点击,长按,拖动,滑动,捏合等
控制类:定位,wifi,蓝牙等
工具类:activity_name, log,性能信息等
怎么才能模拟人类动作呢?
Android sdk tools 提供了一个debug工具,名为adb
Android debug bridge(adb)是一个通用命令行工具
其允许您与模拟器实例或连接的Android设备进行通信
它可以为各种设备操作提供便利,如安装和调试应用
并提供对Unix shell的访问
动作类:可模拟的手势动作
返回:adb shell input keyevent 4
滑动:adb shell input swipe 300 1000 300 500
输入文本:adb shell input text hello
点击:adb shell input tap 300 300
控制类:可控制改变手机的状态
强制停止应用:adb shell am force-stop <packagename>
启动应用:adb shell am start -n <activity>
复制设备的文件到电脑:adb pull <设备里的文件路径> [电脑上的目录]
电量低:adb shell am broadcast -a android.intent.action.BATTERY_LOW
插入耳机:adb shell am broadcast -a android.intent.action.HEADSET_PLUG
安装应用:adb install -r [path]
工具类:手机运行状态与信息,肉眼不可见
查看前台Activity:adb shell dumpsys activity activities | grep mFocusedActivity
查看正在运行的Services:adb shell dumpsys activity services [<packagename>]
查看应用详细信息:adb shell dumpsys package <packagename>
获取imei:adb shell service call iphonesubinfo 1
有非常丰富的命令,供我们使用
*****编写框架*****
封装-动作类
最常用的两个手势动作是什么?
点击与滑动
点击
adb方法:adb shell input tap [x] [y]
adb是通过坐标点点击页面,无法精准点击控件,也无法兼容不同分辨率手机
思路:获取页面元素信息,精准操作。利用adb shell uiautomator dump可获取到当前界面元素xml集合(如右图)单个元素包含id,class,id,text,坐标点等。
原理:通过uiautomator dump获取元素信息,通过传入id,class,text等反推出元素坐标点,利用input tap进行点击
滑动
输入
练习
封装-控制类
adb封装了系统api,可轻松改变手机状态
启动\关闭应用
与应用交互:启动指定应用
练习
封装-工具类
手机运行状态与信息,肉眼不可见数据
那有什么基础数据不可见,但又非常有用呢?
性能信息
日志采集
*****调用执行*****
日志采集
测试
*****结语*****
通过对adb的封装,我们能工具代替一部分手动操作,大大提升了效率也提供了一些新的思路方法,提高测试的产出