Android自动化测试之monkey

一、何为monkey

  Android自动化测试命令行工具,启动脚本位于Android系统的/system/bin目录的Monkey中,jar包位于Android系统的/system/framework目录,Monkey可以运行在模拟器或者设备上,生产随机的用户事件,例如单击、触摸等等。使用Monkey进行自动化测试时,主要涉及四个方面:

1.基本配置: 设置事件数

2.操作限制:例如将测试限制为单个程序包

3.事件类型和时间频率

4.调试选项 Monkey运行时会监控被测系统,并处理:

  • 如果限制了Monkey在一个或者多个特定程序包运行,它将监视并阻止导航到其他任何程序的操作。
  • 如果测试中出现了无响应问题,Monkey将停止并报错。
  • 根据调试选项,生成有关Monkey进度和正在生成事件的报道。

启动:adb shell

cd /system/bin

输入Monkey启动

 

 

 monkey命令格式:

$ adb shell monkey [options] <event-count>

二、monkey事件

  Monkey执行的事件有11种:触摸事件、手势事件、二指缩放事件、轨迹事件、屏幕旋转事件、基本导航事件、系统按键事件、启动Activity事件、键盘事件、其他类型事件。

1.触摸事件

在屏幕按下并抬起的操作,[--pct-touch PERCENT] 指定事件在所有事件中的百分比,事件输出日志是一组Touch(ACTION_DOWN)和Touch(ACTION_UP)。

2.手势事件

在屏幕的某处按下、随机移动、抬起的操作,指直线滑动。 [--pct-motion PERCENT]指令配置,事件输出日志:一个ACTION_DOWN事件、一系列ACTION_MOVE事件和一个ACTION_UP事件。

3.二指缩放事件

模拟双指操作, [--pct-pinchzoom PERCENT],日志输出:一个ACTION_DOWN事件和一个ACTION_POINTER_DOWN事件,即模拟两个手指同时点下;中间是一系列的ACTION_MOVE事件,即两个手指同时在屏幕上直线滑动;结束是由一个ACTION_POINTER_UP事件和一个ACTION_UP事件组成的,即两个手指同时放开

4.轨迹事件

一个或多个随机移动组成,有时会伴随点击,这类事件包含了曲线滑动,类似以前的轨迹球操作。[--pct-trackball PERCENT] 命令配置,该事件是由一系列的Trackball(ACTION_MOVE)事件组成的。

5.基本导航事件

点击方向输入设备的上、下、左、右的按键操作,很少设备有这个按键。[--pct-nav PERCENT] 配置,日志输出Key(ACTION_DOWN)和Key(ACTION_UP)

6.主要导航事件

主要导航按键的操作,这些按键通常会导致UI界面中的动作,如键盘的中间键、回退按键、菜单按键,[--pct-majornav PERCENT]配置,日志输出Key(ACTION_DOWN)和Key(ACTION_UP)

7.系统按键事件

点击系统保留使用的按键的操作,如点击Home键、返回键、音量调节键等。可通过[--pct-syskeys PERCENT]参数来配置其事件百分比。日志输出Key(ACTION_DOWN)和Key(ACTION_UP)。

8.启动Activity事件

启动Activity事件是指在手机上启动一个Activity的操作。在随机的时间间隔中,Monkey将执行一个startActivity()方法,作为最大限度上覆盖被测包中全部Activity的一种方法。可通过[--pct-appswitch PERCENT]参数来配置其事件百分比,该事件是由一个Switch操作组成的。

9.键盘事件

键盘事件主要是一些与键盘相关的操作。比如点击输入框、键盘弹起、点击输入框以外区域、键盘收回等。可通过 [--pct-flip PERCENT]参数来配置其事件百分比。

10.其他类型事件

[--pct-anyevent PERCENT] 指前面事件外的所有事件。该事件是由一个Key(ACTION_DOWN)和一个Key(ACTION_UP)组成的,点击的按键就是其他的一些系统按键,如字母按键、数字按键等。因为现在手机很少带字母按键或数字按键,所以这个事件一般使用得比较少。

11.屏幕旋转事件

--pct-rotation日志输出,degree表示旋转方向,顺时针旋转,0-3分别表示90°、180°、270°、360°。

三、monkey参数

1.事件类参数

  • [-s SEED]伪随机数生成种子值,可以通过此值设置每次测试运行都执行一样的事件
  • [--throttle MILLISEC] 时间间隔,事件之间的固定延迟时间,单位ms

2.调试参数

  • [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...] 包约束,如果应用需要访问其他包里的activity,需要在此指定包名,否则只能访问已指定包名的activity,如果不指定任何包名,monkey将允许系统启动全部包里的activity.
  •  [-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...] 指定运行的activity类别。
  • [--ignore-crashes] 应用程序发生崩溃后继续发送事件,如果不设置此项,monkey遇到崩溃异常后将停止运行

  • [--ignore-timeouts] 应用程序发生超时后继续发送事件

  • [--ignore-security-exceptions] 应用程序发生权限错误时继续运行
  • [--monitor-native-crashes] 监视并且报告native层的崩溃事件
  • [--ignore-native-crashes] 忽略native层crash
  • [--kill-process-after-error] 发生错误时,通知系统停止发生错误的进程
  • [--dbg-no-events] 监视应用程序所调用的包之间的转换
  •  [--hprof] 在事件序列前后立即生成profiling report
  • [--wait-dbg]暂停执行中的monkey,直到有调试器与它连接

四、monkey日志

1.日志级别

-v指定日志级别,[-v]的个数代表日志的详细程序,越多-v越详细,不过目前最多支持3个

-v:0级 初启动、测试完成、最终结果外提供较少信息。

-v -v:提供较详细的测试信息

-v -v -v:提供更详细的安装信息

2.日志输出

日志可以保存在PC或者手机上、标准流和错误流分开保存。

  • 保存在PC中 adb shell monkey [options] <event-count>  >d:\monkey.txt
  • 保存在手机上 adb shell      monkey [options] <event-count>  >/sdcard/monkey.log
  • 标准流与错误流分开保存 monkey [options] <event-count>  1>d:\monkey.txt 2>d:\monkeyerror.txt

monkey脚本实践

  上述指令只能执行随机的事件流,如果需要测试某个特定场景和操作,需要借助自定义脚本。脚本只能通过坐标的方式来定位点击、移动,坐标信息可以通过开发者选项-开启显示指针位置获取。

脚本调用  [-f scriptfile [-f scriptfile] ...]

API参数

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

脚本格式

脚本包含头文件信息和monkey命令

# 头文件

type = raw events

count = 1

speed = 1.0

# monkey命令

# 启动测试

start data >>

LaunchActivity(com.tencent.mm,com.tencent.mm.ui.LauncherUI)

UserWait(2000)

运行

将上述文件保存到D:\monkey_test.txt,push到手机中:adb push d:\monkey_test.txt /sdcard

adb shell monkey -f /sdcard/monkey_test.txt -v -v 100>d:monkey_2.txt

注意:如果不push到手机里,而是adb shell monkey -f d:\monkey_test.txt -v -v 100 >d:\monkey_1.txt的话,会运行失败。

posted @ 2020-12-02 15:34  Cc905  阅读(372)  评论(0编辑  收藏  举报