MONKEY测试

1. 简介

MONKEY测试是一种自动化UI测试机制,通过模拟用户操作(如点击、滑动、长按等),自动对应用界面进行稳定性测试。

核心作用

  • 随机或定向触发UI交互,暴露界面崩溃、卡顿、无响应等潜在问题;

  • 替代重复的手动测试,覆盖更多操作场景,提升测试效率。

优势

  • 自动化执行,节省人力成本;

  • 可定制测试范围(单个应用/所有应用)、时长和操作模式;

  • 支持模拟复杂场景(如睡眠唤醒交替、连续滑动等),贴近真实用户使用习惯。

2. 核心测试命令

通过命令可灵活控制测试范围和模式,以下是常用命令的详细说明:

2.1 随机测试所有应用

命令test random [-period 时长] [-life_time 总时长]

  • 功能:随机选择应用进行测试,按-period(单位:s)自动切换应用;

  • 可选参数:

    • -life_time:设置总测试时长(单位:s),超时后自动停止。

  • 示例:

    • 每30s随机切换一个应用测试,总时长3600s(1小时):

      • test random -period 30 -e -life_time 3600

2.2 定向测试单个应用

命令test app 应用名 [-period 时长]

  • 功能:针对指定应用(如“Clock”)重复测试,-period(单位:s)后自动返回主菜单并重新进入该应用;

  • 示例:

    • 测试“Clock”应用,每30s循环一次:

      • test app Clock -period 30

2.3 顺序遍历所有应用

命令test trav [-period 时长]

  • 功能:按顺序逐个测试所有应用,-period(单位:s)后切换到下一个应用;

  • 示例:

    • 每30s切换一个应用,按顺序测试所有应用:

      • test trav -period 30

2.4. 停止测试

命令test stop

  • 功能:立即停止当前正在执行的所有MONKEY测试。

3. 可选参数说明

参数

作用

单位

-period

单个应用内的测试时长,超时后切换应用或返回主菜单

s

-life_time

总测试时长,超时后自动停止测试(仅test random支持)

s

4. 模拟睡眠唤醒场景

支持模拟设备睡眠与唤醒交替的场景,结合MONKEY测试验证稳定性。以下命令均为开关式命令:第一次执行启动模拟,再次执行停止模拟。

4.1 周期性消息触发睡眠唤醒

命令period_msg [-period 间隔] [-monkey 时长]

  • 功能:按-period(单位:s)周期性发送消息,模拟消息到达导致设备唤醒;

  • 消息类型:随机发送短信、应用通知、来电、挂断等消息,覆盖表情符号、英文、日语、韩语、波斯语、泰语、维吾尔语、阿拉伯语、印地语、中文、字库缺失字符等内容场景;

  • 默认行为:不带参数时启动周期消息模拟,默认基础间隔为40s;每次触发后会在基础间隔上额外增加0~59s随机偏移;

  • 可选参数:

    • -period:设置周期消息的基础间隔(单位:s);

    • -monkey:消息唤醒后同步执行随机MONKEY测试,参数值为单次MONKEY测试基础时长(单位:s),实际执行时长会在该值基础上额外增加0~29s随机偏移;未指定时默认15s。

  • 注意事项:

    • 使用-monkey时,系统会临时将息屏时间设置为1s,停止模拟后恢复原息屏时间;

    • -period小于-monkey + 1,命令内部会自动将-period调整为-monkey + 1,保证每轮MONKEY测试有足够时间执行。

  • 参考实现:

    • 路径及文件:solution/components/message/app_message_ui.c

    • 命令入口函数:cmd_send_period_msg()

  • 示例:

    • 每60s左右发送一次周期消息,消息唤醒后执行30s左右的随机MONKEY测试:

      • period_msg -period 60 -monkey 30

    • 停止周期消息与关联MONKEY模拟:

      • period_msg

4.2 传感器事件触发唤醒

命令lcpu_period_awake [-period 间隔] [-monkey 时长]

  • 功能:通知LCPU按-period(单位:s)周期性上报传感器测试事件,模拟传感器事件唤醒HCPU;

  • 可选参数:

    • -period:设置传感器事件触发间隔(单位:s);

    • -monkey:唤醒后同步执行随机MONKEY测试,参数值为单次MONKEY测试时长(单位:s);不填写具体时长时,由底层按默认策略处理。

  • 注意事项:

    • 使用-monkey时,系统会临时将息屏时间设置为1s,停止模拟后恢复原息屏时间;

    • -period小于-monkey + 1,命令内部会自动将-period调整为-monkey + 1

  • 参考实现:

    • 路径及文件:solution/components/comm/comm_info.c

    • 命令入口函数:cmd_lcpu_period_awake_hcpu()

  • 示例:

    • 每20s触发一次传感器唤醒,唤醒后执行随机MONKEY测试:

      • lcpu_period_awake -period 20 -monkey

    • 每60s触发一次传感器唤醒,唤醒后执行30s随机MONKEY测试:

      • lcpu_period_awake -period 60 -monkey 30

    • 停止传感器唤醒与关联MONKEY模拟:

      • lcpu_period_awake

5. 单命令模式(精确模拟操作)

支持手动指定单个操作(如点击、滑动等),用于定向验证特定场景:

5.1 点击操作

命令test -evt click -xy X Y

  • 功能:模拟在坐标(X,Y)处点击。

  • 示例:点击(100,200)位置:

    • test -evt click -xy 100 200

5.2 长按操作

命令test -evt move -xy X Y -duration 时长

  • 功能:在坐标(X,Y)处长按,时长由-duration(单位:ms)指定。

  • 示例:在(100,200)处长按3000ms:

    • test -evt move -xy 100 200 -duration 3000

5.3 坐标移动操作

命令test -evt move -xy X1 Y1 X2 Y2 -duration 时长

  • 功能:从坐标(X1,Y1)滑动到(X2,Y2),总耗时由-duration(单位:ms)指定。

  • 示例:从(100,200)滑动到(300,200),耗时3000ms:

    • test -evt move -xy 100 200 300 200 -duration 3000

5.4 上下左右滑动

命令test -evt up/down/left/right/slide [-interval 步长] [-rep] [-period 周期]

  • 功能:模拟上下左右滑动;

  • 可选参数:

    • -interval:每次移动的像素步长;

    • -rep:重复执行该操作;

    • -period:重复执行的总时长(单位:ms),超时停止。

  • 示例:连续右滑,步长100像素,循环执行:

    • test -evt right -interval 100 -rep

5.5 帧率测试常用命令

  • 平铺页面连续右滑:

    • test -evt right -interval 100 -xy 19 300 -rep -fps

  • 平铺页面连续左滑:

    • test -evt left -interval 100 -xy 300 300 -rep -fps

  • 平铺页面连续滑动:

    • test -evt slide -interval 100 -xy 300 300 -rep -fps

  • 主菜单连续晃动:

    • test -evt shake

6. 适配说明

若不使用SDK默认GUI架构(通过menuconfig关闭GUI_APP_FRAMEWORK),可在sdk/middleware/lvgl/lvsf/lv_monkey_port.c中适配自定义GUI框架。