Monkey.docx
《Monkey.docx》由会员分享,可在线阅读,更多相关《Monkey.docx(19页珍藏版)》请在冰豆网上搜索。
Monkey
Monkey工具
1.monkey工具
发送伪随机用户事件的工具
monkey工具存在于手机系统中的“ADB工具中”
ADB——andrioddebugbridge
2.MonkeyScript
一组可以被Monkey识别的命令集合
可以重复固定的操作
3.MONKEYRUNNER
提供了一系列的API
可以完成模拟事件及截图操作
4.MONKEY和MONKEYRUNNER差别
Monkey:
在adbshell中,生成用户或系统的伪随机事件
MonkeyRunner:
通过API定义特定命令和事件控制设备
5.MonkeyRunnerAPIS
MonkeyRunner:
用来连接设备或模拟器
MonkeyDevice:
提供安装、卸载应用,发送模拟事件
MonkeyImage:
完成图像保存、及对比的操作
6.MonkeyRunner的测试类型
多设备控制/功能测试/回归测试
三、压力测试结果
1.CRASH:
崩溃,应用程序使用过程中,非正常退出
2.ANR-ApplicationNotResponding
四、测试环境配置
(1)SDK、ADB:
adb检查
(2)JAVA:
md:
输入jave验证码安装是否成功
(3)Python工具
五、具体操作过程
A.手机开发者选项,将USB调试勾选
B.连接手机与电脑cmd:
adbdevices验证
C.安装测试App:
adbinstallpackage.apk
D.发送压力指令:
adbshellmonkey1000(1000件随机事件)
E.获取包名:
adblogcat|findstrSTART——>启动测试APP(我启动浏览器)
***cmd复制:
标记复制内容然后回车键
F.指定包打压力
adbshellMonkey–ppackage1000
五、高级参数应用
1.throttle参数---指定事件之间的间隔
adbshellmonkey--throttle
EX:
adbshellmonkey–pPackage——throttle1000(时间)100(事件)
4
2.seed参数---指定随机生成数的seed值(seed值相同,操作事件也是相同的)
adbshellmonkey–s
1第一次执行事件会生成一串“SEED”值(随机事件的seed值)
2)第二次将“seed”值,“event”值设置一致,即可重复事件
EX:
adbshellmonkry–s
***压力测试设置seed值,如果出现crash,就可以复现
3.“触摸事件”——设置触摸事件的百分比(事件中所占的比例)
adbshellmonkey–-pct—touc(--pct:
两个“-”符号)
adbshellmonkey-v–pPackage–-pct—touch(100)100
-touch事件成对出现:
touchdown和touchup
EX:
adbshellmonkey:
-ppackage–pct–touch100100
:
-v–ppackage–pct–touch100100_列出所有操作
通过界面Eventpercentages查看百分比
4.动作事件---设定动作事件百分比(点击一个操作后松开)
adbshellmonkey–pct-montion
adbshellmonkey–v–ppackage–-pct—touch50–-pct-montion301000
解析:
触摸事件占50%1000*50%
动作事件占30%1000*30%
5.“轨迹球事件”——设定轨迹球事件百分比
adbshellmonkey–pct–thackball
trackball轨迹球
nav基本导航事件,输入设备上下左右
majornav主要导航事件,兼容中间键、返回键、菜单键
syskeys系统导航事件,HOME、Back、拨号键及声音键
6.基本导航事件:
设定基本导航事件百分比:
输入设备的上下左右方向导航
adbshellmonkey==pct–nav
7.主要导航事件:
设定主要导航事件的百分比,兼容中间键,返回键,菜单键
adbshellmonkey–pct–majornav
8.系统导航事件:
设置系统导航事件百分比(手机硬件相关)
HOME/BACK拨号和音量键
adbshellmonkey–pct–syskeys
9.启动Activity事件---启动事件百分比(个ACTIVITY之间切换)
adbshellmonkey–pct-appswitch
10.不常用事件
adbshellMonkey–pct-anyevent
11.崩溃事件:
忽略崩溃和异常(crash时继续进行)
adbshellmonkey–ignore-crashes
12.超时事件---忽略超时事件(ANR)
adbshellmonkey–ignore–timeouts
EX:
adbshellmonkey–v–ppackage–pct–touch50
--pct–montion50–ignore–crashes–ignore–timeouts100
就是:
碰到CRASH或者ANR时候继续
Crash结果分析:
流程:
1.安装引起crash的APP
2.执行压力命令
(1)adblogcat|grepSTART——显示所有APP包名
(2)点击安装的APP获取包名
(3)adbshellmonkey–p包名100
(4)eventinjected:
445(crash)
eventinjected:
抓取crash后代码供开发分析;出现有“seed”数copy后供开发分析
Crash结果分析
1.自己想出办法
adblogcat>F:
\logcat2017.txt
使用一下批处理分析
IFNOT"%strFinished%"==""(
ECHO.[INFO]分析Monkey日志存在:
执行成功标记
ECHO.[INFO]------------------------------------
ECHO."%strFinished%"
ECHO.
)ELSE(
IF%blnException%EQU0ECHO.[INFO]分析Monkey日志结果:
Monkey执行异常中断,请重新执行Monkey脚本!
ECHO.
)
REM如果blnException不为0,说明存在异常,改变字体为淡紫色
IF%blnException%NEQ0(
Color0D
ECHO.[INFO]分析Monkey日志结果:
存在异常日志,请手工再仔细检查!
ECHO.
)ELSE(
ECHO.[INFO]分析Monkey日志结果:
正常
)
ECHO.
ECHO.[EXIT]按任意键关闭窗口...
PAUSE>nul
***使用txt保存,修改后缀名为.bat
.学习别人方法
将执行结果crash信息发给开发
***crash信息中seed值可以重新此问题
ANR结果解析:
流程:
1.引起ANR的app
2.执行压力命令:
adbshellmonkey–pPackage1000,同CRASH流程
3.解析结果的EXCEPTION信息
查看ANR_log:
adbshell
#cd|date|anr|
|data|anr#ls
|data|anr#moretrace.txt
|data|anr#exit
一、MonkeyScript
执行脚本命令:
adbshellmonkey–f
:
脚本文件
脚本执行次数
1.DispatchTrackball轨迹球事件:
action0代表按下,1代表3弹起,xy表示坐标点
2.DispatchPointer点击事件
参数和前者一致,仍旧关注这3个点:
intaction/floatx/floaty
3.dispatchString输入字符串事件
dispatchString(stringtext)
4.LaunchActivity(package,Activity)启动应用
lauchActivity(package,activity)
Activity_被启动的页面名称
5.UserWait(ms)等待事件
userwait(1000)毫秒
6.DispatchPress(intkeycode)#keycode66回车键
帮助实现按回车键
2、MonkeyRunner
什么是monkeyrunner
monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。
通过monkeyrunner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。
monkeyrunner工具的主要设计目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件,但您当然也可以将其用于其它目的。
二、monkeyrunner工具同Monkey工具的差别
Monkey:
工具直接运行在设备或模拟器的adb shell中,生成用户或系统的伪随机事件流。
monkeyrunner:
工具则是在工作站上通过API定义的特定命令和事件控制设备或模拟器。
三、monkeyrunner的测试类型
1、多设备控制:
monkeyrunnerAPI可以跨多个设备或模拟器实施测试套件。
您可以在同一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。
您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。
2、功能测试:
monkeyrunner可以为一个应用自动贯彻一次功能测试。
您提供按键或触摸事件的输入数值,然后观察输出结果的截屏。
3、回归测试:
monkeyrunner可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测试应用的稳定性。
4、可扩展的自动化:
由于monkeyrunner是一个API工具包,您可以基于Python模块和程序开发一整套系统,以此来控制Android设备。
除了使用monkeyrunnerAPI之外,您还可以使用标准的Pythonos和subprocess模块来调用AndroidDebugBridge这样的Android工具。
四、运行monkeyrunner
您可以直接使用一个代码文件运行monkeyrunner,抑或在交互式对话中输入monkeyrunner语句。
不论使用哪种方式,您都需要调用SDK目录的tools子目录下的monkeyrunner命令。
如果您提供一个文件名作为运行参数,则monkeyrunner将视文件内容为Python程序,并加以运行;否则,它将提供一个交互对话环境。
monkeyrunner的命令语法为:
monkeyrunner-plugin
1. alert警告框
voidalert(stringmessage,stringtitle,stringokTitle)
importsys
fromcom.android.monkeyrunnerimportMonkeyRunnerasmr
mr.
执行再CMD输入:
monkeyrunnerXXX.py
如果执行时报错,考虑环境变量是否SDK/tools目录
2. waitForConnection等待设备连接,有多个设备,指明设备
waitForConnection(floattimeout,stringdeviceid)
3. drag拖动
4. press
5. startActivity
6. touch
7. type
8. takeSnapshotSnapshot
9. sameAs
10. writetoFile
计算机小程序
#-*-coding:
utf-8-*-
importsys
fromcom.android.monkeyrunnerimportMonkeyRunner,MonkeyDevice,MonkeyImage
logFile=open("C:
\\monkeyrunner_log.txt","a+")
#连接设备
device=MonkeyRunner.waitForConnection(3,'MB524WW01146')
ifnotdevice:
print("Pleaseconnectadevicetostart!
")
logFile.write("Pleaseconnectadevicetostart!
\n")
else:
print("DeviceConnectedsuccessfully!
")
logFile.write("DeviceConnectedsuccessfully!
\n")
package='.ys100.stumobile'
activity='.AppEntry'
runComponent=package+'/'+activity
#启动计算器
print("Startcalculator")
logFile.write("Startcalculator")
device.startActivity(component=runComponent)
#等待时间
print("Wait15s")
logFile.write("Wait15s")
MonkeyRunner.sleep(15)
1. 我自己写的测试公司小程序(用于播放视频)
#-*-coding:
utf-8-*-
importsys
fromcom.android.monkeyrunnerimportMonkeyRunner,MonkeyDevice,MonkeyImage
logFile=open("F:
\\monkeyrunner_log.txt","a+")
#连接设备
device=MonkeyRunner.waitForConnection()
ifnotdevice:
print("Pleaseconnectadevicetostart!
")
logFile.write("Pleaseconnectadevicetostart!
\n")
else:
print("DeviceConnectedsuccessfully!
")
logFile.write("DeviceConnectedsuccessfully!
\n")
package='.eaglesoul.stuhd'
activity='.AppEntrybnds=[40,40][332,267]'
runComponent=package+'/'+activity
#启动HD有课-学生端
print("StartYouKe")
logFile.write("StartYouKe")
device.startActivity(component=runComponent)
#等待时间
print("Waitforstarttingapp10s")
logFile.write("Waitforstarttingapp10s")
MonkeyRunner.sleep(15)
#登录
print("Login")
logFile.write("Login")
device.touch(888,941,"DOWN_AND_UP")
#等待时间
print("Waitforlogin15s")
logFile.write("Waitforlogin15s")
MonkeyRunner.sleep(15)
#点播
print("VODlable")
logFile.write("VODlable")
device.touch(914,108,"DOWN_AND_UP")
MonkeyRunner.sleep(5)
#播放视频
print("PlayVOD")
logFile.write("PlayVOD")
device.touch(300,400,"DOWN_AND_UP")#点击视频
MonkeyRunner.sleep(5)
device.touch(1300,316,"DOWN_AND_UP")#点击播放按钮
MonkeyRunner.sleep(15)
image=device.takeSnapshot()
image.writeToFile('F:
\\test\\PlayVOD.png','png')
print("Play60s")#播放1分钟
logFile.write("Play60s")
MonkeyRunner.sleep(45)
image=device.takeSnapshot()
image.writeToFile('F:
\\test\\AfterPlay60s.png','png')
#退出播放界面
print("exit")#播放1分钟
logFile.write("exit")
device.touch(50,72,"DOWN_AND_UP")
MonkeyRunner.sleep(5)
#黄冈
print("HuangGanglable")
logFile.write("HangGanglable")
device.touch(1050,90,"DOWN_AND_UP")
MonkeyRunner.sleep(5)
三、Monkeyrunner使用方法
Moneyrunner在使用前,必须先打开模拟器或连接上手机设备。
下面是Monkeyrunner的实例操作。
1.模拟器启动
我们这里选择命令打开模拟器。
运行cmd,在cmd窗口,输入命令:
emulator-avdAVD_test,其中AVD_test是模拟器的名称,填写自己创建的模拟器名称
模拟器启动成功后,我们仍在cmd环境中操作。
现在进入Monkeyrunner的shell命令交互模式。
输入命令:
monkeyrunner
进入shell命令交互模式后,首要一件事就是导入monkeyrunner所要使用的模块。
直接在shell命令下输入命令:
fromcom.android.monkeyrunnerimportMonkeyRunner,MonkeyDevice
再回车,这步完成我们就可以利用monkeyrunner进行测试工作了。
2.模拟器连接
下面我们就要Monkeyrunner连接上模拟器,进行一系列操作了。
输入命令:
device=MonkeyRunner.waitForConnection()
其中,device=MonkeyRunner.waitForConnection(6,’emulator-5554′)
参数1:
超时时间,单位秒,浮点数,默认是无限期地等待。
参数2:
指定的设备名称device_id,默认为当前设备(手机优先,其次为模拟器)
输入命令后,页面上没有错误信息返回,即成功连接设备。
3.app安装并启动
1)app安装
模拟器启动成功后,我们安装自己想要的apk,这里我们选择qq音乐安装。
输入命令:
device.installPackage('F:
\\QQyinle_439.apk'),其中,参数是APK的相对路径。
安装成功返回true,此时查看模拟器我们可以在IDLE界面上看到安装的APK的图标了。
2)app启动
app安装成功后,现在启动该app,命令为:
device.startActivity(component="package名/.activity")
首先,我们有必要说一下,如何获取一个app的package名和activity。
这里,我们只描述一种获取方式。
使用aapt,其中aapt是sdk自带的一个工具,在sdk\builds-tools\目录下:
由上图可知:
packagename:
com.tencent.qqmusic
activity:
.activity.AppStarterActivity
方法一由于日志较多,寻找起来比较费劲,所以我们引出方法二。
方法二(推荐):
把日志存储在特定的文件中,在文件中通过搜索关键字,得到包名及活动名,这里我把结果输出到F盘的log.txt中:
aaptdumpbadgingF:
\QQyinle_439.apk>F:
\log.txt
到此,已经获取了app的package名和activity。
下面,我们真正的启动app。
在原有cmd运行窗口,输入命令:
device.startActivity(component="com.tencent.qqmusic/.activity.AppStarterActivity")
命令执行后,模拟器上的app被启动。
这表示命令启动app成功。
这里的关键是app的packagename和activity对应获取正确,否则启动不了特定app。
四、Monkeyrunner运行python脚本
同样,Monkeyruner可以直接调用指定python脚本,将命令写到python文件里,命名例如***.py,然后我们再从命令行直接通过monkeyrunner运行它即可。
比如,我们还是用上面的例子,语法如下:
monkeyrunner***.py。
接下来monkeyrunner会自动调用***.py,并执行其中的语句,相当方便。
我们这里将上述例子,所有命令放在python文件里,并命名test.py,然后存储到本地F盘,即路径为:
F:
\test.py。
在cmd中运行monkeyrunnerF:
\test.py,这里的python脚本路径为相对路径