• 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的话,会运行失败。

  • 相关阅读:
    tomcat拒绝接收请求记录
    js阻止事件冒泡
    BZOJ 5381 or & Codeforces 623E Transforming Sequence DP+NTT
    BZOJ5384 有趣的字符串题 回文树
    Codeforces 932G Palindrome Partition 回文树+DP
    LOJ2542 随机游走 Min-Max容斥+树上期望DP
    LOJ6070 基因 分块+回文自动机
    BZOJ3682 Phorni 后缀平衡树
    Codeforces 994F Compute Power 二分+DP
    BZOJ2759一个动态树好题 LCT
  • 原文地址:https://www.cnblogs.com/Cc905/p/14070417.html
Copyright © 2020-2023  润新知