基于python+automator2的android app自动化测试环境配置

-- 基于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的介绍.

UIAutomator2UIAutomator的区别.

[项目地址]https://github.com/openatx/uiautomator2

(a)  1.0每次需要把脚本上传到设备,2.0phthon脚本且是所见即所得.

(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可以输入中文,而uiautomatorJava工程需借助utf7输入法才能输入中文.

(f)uiautomator2必须明确EditText框才能向里面输入文字,uiautomator直接指定父类也可以在子类中输入文字.

(g)uiautomator2获取控件速度比uiautomator.

(h)2.0基于 Instrumentation, 可以获取应用Context,可以使用Android服务及接口。

i2.0基于 Junit4,测试用例无需继承于任何父类,方法名不限,使用Annotation进行, 1.0需要继承UiAutomatorTestCase,测试方法需要以test开头。

j2.0采用Gradle进行构建,1.0使用MavenAnt

k2.0新增UiObject2UntilByBySelector等接口。

l2.0输出到Logcat1.0可以使用System.out.print输出流回显至执行端。

m2.0输出为APK1.0输出为JAR


UIAutomator2,UIAutomator,Bootstrap等之间的关系.

(a) UIAutomator2底层基于googleUIAutomator.

(b) UIAutomatorBootstrap的关系.

(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.121503)命令. 至于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相关的场景问题.

关于usbwifi连接的比较.

python-uiautomator2连接手机的方式有两种,一种是通过WIFI,另外一种是通过USB。两种方法各有优缺点。
WIFI最便利的地方要数可以不用连接数据线,USB则可以用在PC和手机网络不在一个网段用不了的情况.

抓取手机应用元素的方法(uiautomator2uiautomatorView有冲突).

虽然很想用Android SDK内置工具uiautomatorviewer.bat,但是运行uiautomator2的时候,uiautomatorviewer.bat运行不起来,两者之间冲突太严重。
于是参考着uiautomatorviewer的界面,我又写了一个weditor,调用python-uiautomator2的两个接口screenshotdump_hierarchy这样就不会有冲突问题了

注:weditor依然处于开发期,功能可能会跟文中描述的有所不同

安装方法: pip install --pre weditor

使用方法:
首先运行python -m weditor,之后浏览器会自动打开一个网页 http://atx.open.netease.com (注:这个网址仅提供一个前端,而python -mweditor这个命令则本地开放了HTTP的接口,前端去跟本地的服务去通信).

<命令>

<效果>


参考资料

51La