Android中如何做Monkey测试

版权声明:本文为博主原创文章,转载请注明出处! https://blog.csdn.net/JavaAndroid730/article/details/53312555

转载请注明出处!

索引

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 10
adb shell monkey -v -v 10
adb 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 events
count=10
speed=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): 按键。参数: keycode

RotateScreen(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 events
count=10
speed=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测试完成。


猜你喜欢

转载自blog.csdn.net/JavaAndroid730/article/details/53312555
今日推荐