app自动化+win10+编写

大家都知道monkey是一只会乱跑的猴子,主要功能就是抗压测试,测试APP会不会闪退/崩溃/无响应。下面我写的脚本是在python中调用一些monkeyrunner的函数,让这只乱跑的猴子模仿我们的操作,为我们节约时间同时也解放我们的双手~

一、配置环境

首先是配置环境,需要jdk啊,sdk啊之类的,这里就不多做介绍。

二、进入shell模式

配置好所有环境后现在cmd窗口下验证一下是否能正常使用,在cmd窗口输入命令:monkeyrunner。如果显示java的版本号信息并进入shell命令交互模式就代表这个环境已经配置好啦(如下图),可以开始写jio本解放双手了。如果显示monkeyrunner不是内部或外部命令的话就需要回去看看自己每一步有没有正确进行~

image

那进入之后呢,先打开我们需要测试的模拟器或者手机 ps:真机需要开启开发者模式哦~

(那怎么才能知道自己的电脑检测到几台设备呢,这个时候需要ctrl+z退出shell模式,在cmd下输入adb devices来查找,会出现它检测到的所有设备,如图)

image

进入shell模式后有什么用呢,其实shell模式就是直接命令monkey来操作的,比如叫这只小猴子去倒杯水,在shell模式下必须分开命令,先告诉monkey你需要站起来,再告诉他直走左转,抬起手,等等等等。那每次进行一个动作还要输入这么多命令。这个时候我们PyCharm的作用就来了,PyCharm会把你对monkey的每一条命令装到一个文件里,等到你想让monkey去帮你“倒杯水”的时候直接调用。

对自己写的代码不自信的小伙伴可以在shell模式下一条一条的对软件操作然后再写入文件中,软件做出反应就代表代码ok,反之则需要去看看是不是标点符号错了之类的。

三、导入monkeyrunner模块

导入MonkeyRunner需要的一些函数,直接在shell交互模式下输入命令:

from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice 然后回车

image

没有提示就是最大的提示,提示成功导入了。导入以后我们要去连接我们需要操作的设备~

四、开始操作

输入命令:device=MonkeyRunner.waitForConnection(参数1,参数2)

如果只有一个设备括号就不需要再括号里填东西 如果有多个设备需要在括号里加入参数(参数1:超时时间/单位是秒/浮点数/默认是无限期的等待,参数2:设备id(可以用adb devices查看id)默认为真机优先)

image

没有提示,进入下一步,下一步要这只猴子安装软件了,使用命令device.installPackage(APK的路径)

或者直接把APK文件拖到模拟器中也可以安装软件

image

成功后会返回true,在模拟器也能看到这个APP。下一步启动,命令:device.startActivity(component="package名/.activity")

image

那么问题就来了,我该怎么得到包名呢

使用aapt,aapt是sdk里自带的工具在sdk\build-tools\目录下,在此目录下进入cmd窗口,输入命令:aapt dump badging D:\APK的路径(路径中不能有空格~)

image
image

成功打开软件后就可以对软件进行操作啦,要模仿人的操作需要知道手机或者模拟器上的坐标,根据坐标来指定monkey需要点哪里。下面介绍几个获取坐标的工具。

五、工具介绍
工具一:uiautomatorviewer.bat 这个工具是sdk自带的,在sdk\tools下,在cmd里输入uiautomatorviewer.bat也行,直接找到该文件双击也行,打开之后是这样的
image

点击红色圈圈里的地方就可以截取到设备的屏幕,红色圈圈右边那个图标就是具有层次性的截图,一般只需要用到前面这个就好啦~截出来以后是这样的

image

任意点击一个地方就可以抓取该位置的坐标,如上图所示,下载的位置是【250,595】【406,720】,第一个括号里的是红色圈圈的左上角那个点的XY坐标,第二个括号里的是右下角点的XY坐标,所以我们只需要在两个X值之间任意选择一个数,两个Y值之间任意选择一个数,例如【300,600】

工具二:通过开发者选项里的指针位置获取坐标
image

上面的XY值就是该点的坐标

工具三:monkeyrecorder获取坐标

在已经导入monkeyrunner,monkeydevice后还需要导入monkeyrecorder 命令:

from com.android.monkeyrunner.recorder import MonkeyRecorder as recorder

导入之后连接,命令:device=MonkeyRunner.waitForConnection()

连接好了之后就是启动啦,命令:recorder.start(device)

PS:as的意思是命名的意思,为了方便后续调用

image

这里全部操作完了之后会弹出一个monkeyrecorder的弹窗,这里获取的坐标就比较方便,点击一下就有一个唯一坐标出现在右边,在模拟器上操作,在recorder上记录坐标,如果碰到recorder上界面和模拟器不同步的情况可以点击右上角的refresh display就可以刷新页面啦~

image

点击的每一步的坐标都会在右边展示出来,如上图

工具介绍完啦~知道怎么获取坐标后就可以开始写具体操作的代码了

monkey runner中会用到的一些命令:

截图;

result = device.takeSnapshot()

result.writeToFile('C:\\Users\\Martin\\Desktop\\test.png','png')

延时(秒);

MonkeyRunner.sleep(3)

滑动屏幕;

for i in range(1,70):

    device.drag((250,850),(250,110),0.1,10)  //开始,结束,持续时间,步骤  

for i in range(1,70):

   device.drag((250,110),(250,850),0.1,10)

触击屏幕;

device.touch(507,72,"DOWN_AND_UP")

按键

按下HOME键 device.press('KEYCODE_HOME','DOWN_AND_UP')

相应的按键对应的名称如下:

menu键:KEYCODE_MENU

home键:KEYCODE_HOME

back键:KEYCODE_BACK

search键:KEYCODE_SEARCH

call键:KEYCODE_CALL

end键:KEYCODE_ENDCALL

上导航键:KEYCODE_DPAD_UP

下导航键:KEYCODE_DPAD_DOWN

左导航键:KEYCODE_DPAD_LEFT

右导航键:KEYCODE_DPAD_RIGHT

ok键:KEYCODE_DPAD_CENTER

上音量键:KEYCODE_VOLUME_UP

下音量键:KEYCODE_VOLUME_DOWN

power键:KEYCODE_POWER

camera键:KEYCODE_CAMERA

其实写起来很简单,稍微有点让人头秃的是前面的步骤,下面放上我自己写的一个简单的脚本

#coding:utf-8
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice
from com.android.monkeyrunner.recorder import MonkeyRecorder as recorder
device=MonkeyRunner.waitForConnection()
device.installPackage("D:\monkeyrunner\baoming.apk")
recorder.start(device)
MonkeyRunner.sleep(3)
runComponent = ("baoming/.zhuaqudaode.present.SplashActivity")
device.startActivity(component="com.zhuaqudaode.debug/.com.zhuaqudaodeSplashActivity")
MonkeyRunner.sleep(3)
device.touch(477,317,"DOWN_AND_UP")
MonkeyRunner.sleep(5)
device.touch(623,1232,"DOWN_AND_UP")
MonkeyRunner.sleep(2)
device.touch(380,194,"DOWN_AND_UP")
MonkeyRunner.sleep(2)
device.touch(612,384,"DOWN_AND_UP")
MonkeyRunner.sleep(2)
device.touch(672,96,"DOWN_AND_UP")
MonkeyRunner.sleep(2)
device.press('KEYCODE_BACK',MonkeyDevice.DOWN_AND_UP)
MonkeyRunner.sleep(1)
device.press('KEYCODE_BACK',MonkeyDevice.DOWN_AND_UP)
device.press('KEYCODE_BACK',MonkeyDevice.DOWN_AND_UP)
print("pass")

最后最后

adb logcat > ****.log 是把monkey日志文件重定向一个地方,方便查看错误日志

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342