Monkey.docx

上传人:b****7 文档编号:10847795 上传时间:2023-02-23 格式:DOCX 页数:19 大小:1.18MB
下载 相关 举报
Monkey.docx_第1页
第1页 / 共19页
Monkey.docx_第2页
第2页 / 共19页
Monkey.docx_第3页
第3页 / 共19页
Monkey.docx_第4页
第4页 / 共19页
Monkey.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

Monkey.docx

《Monkey.docx》由会员分享,可在线阅读,更多相关《Monkey.docx(19页珍藏版)》请在冰豆网上搜索。

Monkey.docx

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脚本路径为相对路径

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1