Monkey使用

来源:互联网 发布:中国网络墙叫什么名字 编辑:程序博客网 时间:2024/05/17 10:07

Monkey测试

索引

  • Monkey的介绍
  • Monkey基本使用
  • Monkey命令参考
  • Monkey测试信息截取
    • CRASH
    • ANR
  • MonkeyScript
    • 脚本格式
    • 常用API
    • 简单案例
  • Monkey案例实践

Monkey的介绍

Monkey是一个命令行工具,可以运行在模拟器里或实际设备中,使用安卓调试桥(adb)来运行它,向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行压力测试,可以根据获取的log信息进行修复。

Monkey的基本使用

  1. 连接设备:adb devices 查看设备是否连接成功
  2. adb shell 进入shell界面
  3. 设备安装要运行的程序包或apk(或者通过查看data/data下的程序包):adb安装apk:在所安装的apk路径下,使用adb install **.apk
  4. 执行monkey测试命令:monkey -p your.package.name -v 500

在不知道所安装的apk的包名的时候,采用adb命令查看包名:

  1. adb logcat|grep START
  2. 打开已安装的apk,查看出现的ActivityManager信息,cmp=name,此name就是打开的apk的包名。

Monkey命令使用

-help   列出简单用法-v      作用:命令行上的每一个-v都将增加反馈信息的详细级别。Level0(默认),除了启动、测试完成和最终结果外只提供较少的信息。Level1,提供了较为详细的测试信息,如逐个发送到Activity的事件信息。Level2,提供了更多的设置信息,如测试中选中或未选中的Activity信息。例:adb shell monkey -v 10adb shell monkey -v -v 10adb shell monkey -v -v -v 10-s <seed>作用:伪随机数生成器的seed值。如果用相同的seed值再次运行monkey,将生成相同的事件序列。例: adb shell monkey -s 12345 -v 10 --throttle <milliseconds>作用:在事件之间插入固定的时间(毫秒)延迟,你可以使用这个设置来减缓Monkey的运行速度,如果你不指定这个参数,则事件之间将没有延迟,事件将以最快的速度生成。例: adb shell monkey –throttle 300 -v 10注:常用参数,一般设置为300毫秒,原因是实际用户操作的最快300毫秒左右一个动作事件,所以此处一般设置为300毫秒。-p <allowed-package-name>作用:如果你指定一个或多个包,Monkey将只允许访问这些包中的Activity。如果你的应用程序需要访问这些包(如选择联系人)以外的Activity,你需要指定这些包。如果你不指定任何包,Monkey将允许系统启动所有包的Activity。指定多个包,使用多个-p,一个-p后面接一个包名。例: adb shell monkey -p com.android.browser -v 10 -c <main-category>作用:如果你指定一个或多个类别,Monkey将只允许系统启动这些指定类别中列出的Activity。如果你不指定任何类别,Monkey将选择谢列类别中列出的Activity,Intent.CATEGORY_LAUNCHER和Intent.CATEGORY_MONKEY。指定多个类别使用多个-c,每个-c指定一个类别。例: adb shell monkey -p com.paipai.ershou -v 10 -c --pct-touch <percent>作用:调整触摸事件的百分比。(触摸事件是指在屏幕中的一个down-up事件,即在屏幕某处按下并抬起的操作)例: adb shell monkey –pct-touch 100 -v 10注:常用参数,此参数设置要适应当前被测应用程序的操作,比如一个应用80%的操作都是触摸,那就可以将此参数的百分比设置成相应较高的百分比。--pct-motion <percent>作用:调整motion事件百分比。(motion事件是由屏幕上某处一个down事件、一系列伪随机的移动事件和一个up事件组成)例: adb shell monkey –pct-motion 100 -v 10注:常用参数,需注意的是移动事件是直线滑动,下面的trackball移动包含曲线移动。--ignore-crashes作用:通常,应用发生崩溃或异常时Monkey会停止运行。如果设置此项,Monkey将继续发送事件给系统,直到事件计数完成。--ignore-timeouts作用:事件请求超时会影响monkey的测试。如果设置此项,Monkey将继续发送事件给系统,直到事件计数完成。保存测试日志其实很简单,命令如下:adb shell monkey -p com.ihongqiqu -v -v -v 500 > monkeytest.txt

Monkey测试信息

在Monkey测试过程中可能会出现程序崩溃(CRASH)和程序无响应的情况(ANR),要将测试的log信息获取到,从而解决bug。

CRASH

CRASH即崩溃信息,程序在运行中非正常退出。 不设置忽略crashes,在测试过程中出现CRASH,会中断测试,并显示CRASH信息和seed信息

根据seed值来完成bug的复现:adb shell monkey -p com.feicuiedu.monkeytestdemo -s 1476474162566 -v 1000

ANR

Applicaton Not Responsing.

同样在monkey测试过程中,如果出现ANR现象,会输出相应的信息,以ANR开头,获取到信息进行问题的解决,同样可以通过seed来进行复现。

附:如果在手动测试过程中出现ANR,日志信息出现在手机中:

  1. adb shell
  2. cd /data/anr 切换到设备路径下
  3. ls 可以看到traces.txt 里面即为log信息

MonkeyScript

MonkeyScript是monkey的脚本语言,是一组可以被Monkey识别的命令集合,可以帮我们完成一系列的被固定的重复性操作,Monkey通过脚本来进行测试,简单快捷、不需要任何工具,只是一个记事本文件,缺点是在坐标、按键等方面没有逻辑性。

脚本格式

#头文件、控制monkey发送消息的参数type=raw eventscount=10speed=1.0#以下为monkey命令start data >>DispatchPress (KEYCODE_HOME)DispatchPress (KEYCODE_MENU)

常用API

常用API的介绍,其中keycode参考keycode列表

LaunchActivity(pkg_name, cl_name): 启动应用的Activity。参数:包名和启动的Activity。Tap(x, y, tapDuration): 模拟一次手指单击事件。参数:x,y为控件坐标,tapDuration为点击的持续时间,此参数可省略。DispatchPress(keyName): 按键。参数: keycodeRotateScreen(rotationDegree, persist): 旋转屏幕。 参数:rotationDegree为旋转角度, e.g. 1代表90度;persist表示旋转之后是否固定,0表示旋转后恢复,非0则表示固定不变。DispatchFlip(true/false): 打开或者关闭软键盘。LongPress():  长按2秒。PressAndHold(x, y, pressDuration):  模拟长按事件。DispatchString(input):  输入字符串。Drag(xStart, yStart, xEnd, yEnd, stepCount):  用于模拟一个拖拽操作。PinchZoom(x1Start, y1Start, x1End, y1End, x2Start, y2Start, x2End, y2End, stepCount): 模拟缩放手势。UserWait(sleepTime): 休眠一段时间DeviceWakeUp(): 唤醒屏幕。PowerLog(power_log_type, test_case_status): 模拟电池电量信息。WriteLog(): 将电池信息写入sd卡。RunCmd(cmd): 运行shell命令。DispatchPointer(downtime,eventTime,action,x,yxpressure,size,metastate,xPrecision,yPrecision,device,edgeFlags):向指定位置,发送单个手势。DispatchPointer(downtime,eventTime,action,x,yxpressure,size,metastate,xPrecision,yPrecision,device,edgeFilags):发送按键消息。LaunchInstrumentation(test_name,runner_name): 运行一个instrumentation测试用例。DispatchTrackball: 模拟发送轨迹球事件。ProfileWait: 等待5秒。StartCaptureFramerate():  获取帧率。EndCaptureFramerate(input): 结束获取帧率。

API方法中控件位置(X,Y轴的坐标)的获取:使用Android提供的工具uiautomatorviewer.bat

在Android SDK路径下--> tools --> uiautomatorviewer.bat,打开就可以展示设备/模拟器上展示的视图,展示视图结构和坐标。

简单示例

#头文件、控制monkey发送消息的参数type=raw eventscount=10speed=1.0#以下为脚本正文start data >>#1.打开浏览器LaunchActivity(com.android.browser,com.android.browser.BrowserActivity)ProfileWait()#2.清空网址Tap(223,146)ProfileWait()DispatchPress(112)ProfileWait()#3.输入网址DispatchString(www.baidu.com)ProfileWait()#4.确认,载入网址DispatchPress(KEYCODE_ENTER)ProfileWait()#5.完成退出浏览器DispatchPress(KEYCODE_HOME)ProfileWait()

1.脚本完成后将.txt 文件push到手机中

adb push name.txt path

其中name是指monkey脚本文件的名称,path是要push到手机上的路径

2.运行Monkey脚本

monkey -f path/name.txt -v 500

path是push的路径,name是脚本文件的名称。

案例实践

随机事件流对MonketTestDemo进行测试:

1. adb devices 查看设备是否连接

2. adb shell 进入shell界面

3. monkey -p com.feicuiedu.monkeytestdemo -v 500 执行monkey命令

4. (可选)monkey -p com.feicuiedu.monkeytestdemo -v 500 > monkeytest.txt 执行monkey命令,并将monkey日志存储

一次随机的自动化Monkey测试完成。

MonkeyScript对MonkeyTestDemo进行测试:

1. 完成monkey.txt脚本的编写,保存到某一路径下

2. 切换到monkey.txt路径下

3. adb push monkey.txt /data/local/temp/(设备的任一路径,无确切规定)

4. adb shell 切换到设备下

5. cd /data/local/temp 切换到monkey.txt路径下

6. monkey -f monkey.txt -v 10 执行monkey脚本及执行次数

一次MonkeyScript的自动化Monkey测试完成。

0 0
原创粉丝点击