-- 基于python+automator2的android app自动化测试环境配置
【官网】:https://github.com/openatx/uiautomator2
应用场景
有些时候,我们需要对android开发的app进行测试,但常规的手工测试效率低,时间长,成本高..为了让我们的测试提高效率和质量,需要配置一种能够基于python脚本化语言自定义编写测试过程的自动化测试环境.基础资源
本文内容依赖:windows 7/10,ADB,weditor,python
使用须知
本项目手机端基于google的uiautomator,在uiautomator的使用中会结合uiautomatorview. 但在uiautomator2的应用中会与uiautomatorview出现冲突,因此作者开发了weditor(用于获取android 应用的当前界面元素结构及属性以及截屏等).
配置步骤
关于UIAutomator2的介绍.
UIAutomator2与UIAutomator的区别.
[项目地址]https://github.com/openatx/uiautomator2
(a) 1.0每次需要把脚本上传到设备,2.0是phthon脚本且是所见即所得.
(b) Requirements: Android >= 4.4 Python >=2.7 || <= 3.7 .
(c)UiAutomator V2修复了UiAutomator V1中遇到的大多数问题,最重要的是实现了与Android系统更新的分离.
(d)在获取到toast信息的时候需要将automationName设置成UiAutomator2,就是因为在UiAutomator2上新增了AccessibilityService服务,可以实现Toast的获取.
(e)uiautomator2可以输入中文,而uiautomator的Java工程需借助utf7输入法才能输入中文.
(f)uiautomator2必须明确EditText框才能向里面输入文字,uiautomator直接指定父类也可以在子类中输入文字.
(g)uiautomator2获取控件速度比uiautomator快.
(h)2.0基于 Instrumentation, 可以获取应用Context,可以使用Android服务及接口。
(i)2.0基于 Junit4,测试用例无需继承于任何父类,方法名不限,使用Annotation进行, 1.0需要继承UiAutomatorTestCase,测试方法需要以test开头。
(j)2.0采用Gradle进行构建,1.0使用Maven或Ant。
(k)2.0新增UiObject2、Until、By、BySelector等接口。
(l)2.0输出到Logcat,1.0可以使用System.out.print输出流回显至执行端。
(m)2.0输出为APK,1.0输出为JAR。
UIAutomator2,UIAutomator,Bootstrap等之间的关系.
(a) UIAutomator2底层基于google的UIAutomator.
(b) UIAutomator与Bootstrap的关系.
(c) UIAutomator2.
配套工具.
安装ADB.
步骤1)前往:https://developer.android.com/studio/releases/platform-tools.html
也可以自行百度,安装android-sdk即可.
步骤2)配置android-sdk 变量.
逍遥安卓模拟器场景:请将adb.exe所在目录(本例是:D:InstallXyaz_installMicrovirtMEmu)设置到环境变量path中.
如果是手机则请下载:adb.exe, AdbWinApi.exe,AdbWinUsbApi.exe,aapt.exe并放到指定目录,之后类似上述模拟器场景设置path环境变量.
步骤3)在cmd中执行 adb devices直到能显示正常信息为止.
python包管理器pip的安装.
步骤1)进入python官网( https://www.python.org/ ),建议下载3.6.2版本.
步骤2)安装时,选择Customize Installation(自定义安装),安装过程有勾选的(包括pip)在内的都勾选即可.
步骤3)测试python是否安装成功(下图为成功的显示).
获取帮助
pip --help
升级 pip
pip install -U pip
安装包
pip install SomePackage
卸载包
pip uninstall SomePackage
升级指定的包
pip install -U SomePackage
搜索包
pip search SomePackage
查看指定包的详细信息
pip show -f SomePackage
列出已安装的包
pip freeze or pip list
查看可升级的包
pip list -o
核心安装步骤.
安装UIAutomator2.
pip install --pre -U uiautomator2
确保adb能识别设备(adb devices后有设备).
[注]下列以逍遥安卓为例,其它手机的情况下无需(adb connect 127.0.0.1:21503)命令. 至于adb命令即可以使用android-sdk下的也可以使用逍遥模拟器自带的:D:Program FilesMicrovirtMEmu下的adb.
初始化(安装相关的驱动到设备上).
python -m uiautomator2 init
[注1]如果执行失败了,有异常抛出,则可以尝试关闭模拟器,关闭cmd命令..重新启动模拟器,在cmd命令中连接设备,知道adb devices有设备列出后,再执行该命令.
[注2]确保上述命令最后返回 success 才算是安装成功.
常见问题
快速入门
关于使用.
基于python的使用.
[用法1:在cmd中使用]
[用法2:基于python shell]
如何获取python命令语句对应的http参数(打开d.debug=True)//仅仅测试则此处请跳过, 这里针对有野心进一步加工处理甚至移植到其它编程语言的用户.
>>> d.debug = True
>>> d.info
12:32:47.182 $ curl -X POST -d ‘{"jsonrpc": "2.0", "id": "b80d3a488580be1f3e9cb3e926175310", "method": "deviceInfo", "params": {}}‘ ‘http://127.0.0.1:54179/jsonrpc/0‘
12:32:47.225 Response >>>
{"jsonrpc":"2.0","id":"b80d3a488580be1f3e9cb3e926175310","result":{"currentPackageName":"com.android.mms","displayHeight":1920,"displayRotation":0,"displaySizeDpX":360,"displaySizeDpY":640,"displayWidth":1080,"productName"
:"odin","screenOn":true,"sdkInt":25,"naturalOrientation":true}}
<<< END
基于http命令请求的使用(用于封装到c#等语言中).
关于使用UIAutomator2.0相关的场景问题.
关于usb与wifi连接的比较.
python-uiautomator2连接手机的方式有两种,一种是通过WIFI,另外一种是通过USB。两种方法各有优缺点。
WIFI最便利的地方要数可以不用连接数据线,USB则可以用在PC和手机网络不在一个网段用不了的情况.
抓取手机应用元素的方法(uiautomator2与uiautomatorView有冲突).
虽然很想用Android SDK内置工具uiautomatorviewer.bat,但是运行uiautomator2的时候,uiautomatorviewer.bat运行不起来,两者之间冲突太严重。
于是参考着uiautomatorviewer的界面,我又写了一个weditor,调用python-uiautomator2的两个接口screenshot和dump_hierarchy这样就不会有冲突问题了
注:weditor依然处于开发期,功能可能会跟文中描述的有所不同
安装方法: pip install --pre weditor
使用方法:
首先运行python -m weditor,之后浏览器会自动打开一个网页 http://atx.open.netease.com (注:这个网址仅提供一个前端,而python -mweditor这个命令则本地开放了HTTP的接口,前端去跟本地的服务去通信).
<命令>
<效果>