返回信息流话说是这样的,楼主想安装某种安卓应用,在应用商店搜了下关键字,我勒个去~弹出几十上百个相关app。先选一个安装吧,选下载量最大的或好评最多的,这肯定稳妥,嗯。但装完发现并不满意,好吧换另一个试试,然后就发现耗费了大量时间在安装、对比、卸载app上面。
作为程序员,怎么能把时间浪费在这种机械工作上呢?有没有一种办法,能够实现自动下载、安装和检测app?体内的“洪荒之力.py”告诉我:用python啊!可以先用爬虫把符合某一关键字的应用的apk都爬下来。然后,自动安装apk,自动运行app,自动截图,完了对比多个app的截图看哪个合适就行了,一目了然!一切听起来都好有道理啊!
问题是怎么自动安装、运行、截图?用安卓sdk啊!so easy!
用过sdk的童鞋应该对adb很熟悉,adb是个what? 它是用来管理安卓模拟器和甄姬真机的通用调试工具,功能强大,简单实用,直接打开cmd即可使用adb命令。那用adb是否可以安装apk和运行app以及截图呢?当然啊!基于几个adb命令就行了:
adb install {apkPath}#安装apk
adb shell monkey -p {pkgName} -vvv 100#给设备上指定包名的app发送100个随机事件流
adb shell /system/bin/screencap -p /sdcard/temp.png#给安卓设备截屏并保存到sd卡
adb pull /sdcard/temp.png {pngPath}#将安卓设备上的图片传入到电脑的指定路径中
adb uninstall -p {pkgName}#根据app的包名卸载app
以上命令中关键的是monkey这个自动化测试工具,monkey又是个what?它可以让app执行随机事件流,就跟猴子一样在你的app上乱点乱按,是测试app最简单有效的办法。
好的,看来问题就要解决了。哎哎~等会,那个app的包名怎么写?这个用sdk里面的aapt工具就好了啊,aapt可以根据apk解析包名、入口activity、权限等信息。就好像下面这样:
为了命令执行方便,把adb所在目录和aapt所在目录添加进系统变量的Path变量里,能够全局执行adb和aapt。然后就该发挥python大法的时候了,把cmd命令都集成到python脚本里,一键运行python脚本,自动安装指定路径下的所有apk文件,然后运行app、截屏保存、卸载app…
一键运行脚本就能获得app的截图信息,app是怎样的通过截图一目了然:
那能不能用程序根据截图自动识别并判断出出我想要的app呢?(⊙o⊙)…这个好像有点难,程序怎么知道你想要哪种app啊喂!alphaGo也没法知道啊!不过OCR文字识别可以把截图中的文字识别出来,输出以供浏览,但其实还不如直接看截图方便…
接下来,可以对程序的运行做一些优化。从txt文件读写apk解析信息,还有安装apk,截屏并保存到电脑等都是IO密集型运算,用多线程可以大幅降低程序运行时间。此外,最好还是将apk安装在安卓模拟器上,可以不用点确认直接静默安装,如果通过USB连接安装到真机上,每个app的安装都要手动确认,就不能真正解放双手了。自动化测试的主要代码放到github上:
https://github.com/leorunwind/android_monkey_test
其实Monkey的一个缺点就是不能自己指定事件,只能随机产生事件流。如果非要自己指定事件的话,用MonkeyRunner就好了,它也是sdk的自带工具,可以用MonkeyRunner运行python测试脚本,具体用法参考http://developer.android.com/tools/help/monkeyrunner_concepts.html
楼主是安卓自动化测试小白,写这个基于adb的python脚本纯属为了学习,希望大神提出宝贵意见,轻喷轻喷= =
这是一条镜像帖。来源:北邮人论坛 / python / #13572同步于 2016/4/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
用python大法帮我选择合适的安卓app
iamluo
2016/4/22镜像同步25 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
楼主略叼,给跪了
【 在 iamluo (昵称是什么) 的大作中提到: 】
: 话说是这样的,楼主想安装某种安卓应用,在应用商店搜了下关键字,我勒个去~弹出几十上百个相关app。先选一个安装吧,选下载量最大的或好评最多的,这肯定稳妥,嗯。但装完发现并不满意,好吧换另一个试试,然后就发现耗费了大量时间在安装、对比、卸载app上面。
: 作为程序员,怎么能把时间浪费在这种机械工作上呢?有没有一种办法,能够实现自动下载、安装和检测app?体内的“洪荒之力.py”告诉我:用python啊!可以先用爬...
: 问题是怎么自动安装、运行、截图?用安卓sdk啊!so easy!
: ...................
要自己写JUnit的吗?我并不了解啊……
【 在 jinsen47 的大作中提到: 】
: 楼主在instrumental test方面有没有研究呢?可否分享一下
: