Android自动化测试(二)

来源:互联网 发布:海贼王 居鲁士 知乎 编辑:程序博客网 时间:2024/05/22 20:49

背景

之前调研过:

Android自动化测试

最后我们选择了ATX

存在问题

用了一段时间,发现有不少问题:
1,输入中文的时候,会间歇性缓慢
2,控制脚本时不时会报 RPC service not found之类的错误
3,并发控制的时候,第一下要先串行跑一波,初始化uiautomator的功能
4,耗CPU、耗内存,耗IO

修正方法及分析

1,中文输入法的问题我做了修改,见自动化测试输入文字

2,3 主要是uiautomator的问题。
花了一点时间去分析uiautomator 是基于Testing UI for Multiple Apps做的封装。

之前做了一些分析android uiautomator 点击分析

简单说就是把事件inject到InputManger中,走分发的逻辑,因为inject过程中会检查应用的权限,所以需要弄一个.test的app。在python层,rpc调用uiautomator.apk提供的功能。当然这样是有好处的,好处在于,点击成功与否都是知道的。

但是rpc调用不稳定,而且会存在缓存的问题。我看完了adb input的代码,发现他提供的功能是全的。但是也是走的是inject的方式。还可以再底层一点的控制,adb sendevent,但是写脚本不好写,所以adb input就已经很足够了。

python atx gui 的工具不好用,我也做了一点点UI的调整

这里写图片描述

4,现在还没解决,有点思路:

IO,内存,cpu,主要是在处理图像上,考虑把图像匹配移到android中进行处理。

预期效果应该是在android中加一个工具,例如

cv match /path-to-target/traget.png  /path-to-screen/screencap.png(x1,y1)|(x2,y2)|(x3,y3)|(x4,y4)

opencv

写出来了,方法整理在use opencv in android system

在android上搞定图像匹配之后,点击图片可能会分为几步

# check file exitadb push object.png /path-to/object.pngadb shell screencap -p /path-to/screen.png$location = adb shell cv match /path-to/object.png /path-to/screen.pngadb shell wm size# computer sizeadb input tap $location

但是这样距离我们的预期有点距离。

这几个步骤应该是一个原子性的操作,不应该分多步执行

也许 可以修改本机的adb,例如增加支持 adb click /local-path-to/object.png ?再考虑考虑。

输出

修改后的代码fork在

https://github.com/wuyisheng/ATX

原创粉丝点击