MONKEY 测试¶
1. 简介¶
MONKEY 测试通过模拟 LVGL 输入事件,对应用界面进行自动化稳定性测试。SiFli 的 test 命令支持随机应用测试、定向应用测试、应用遍历、指定输入动作以及操作录制和回放。
2. 测试命令¶
自动帧率场景测试¶
命令:test fps [seconds|cellular_s list_s tileview_s setting_s]。
按顺序测试蜂窝主菜单持续圆周 shake 拖动、列表主菜单上下分页滑动、tileview 左右分页滑动、设置菜单上下分页滑动。列表和设置菜单每完成 5 次同方向分页后反向,形成上下往返;tileview 保持单向滑动并使用循环模式回到起始页面。每轮分页释放后重新按下,避免持续按住导致回拖抵消位移。
test fps # 每个场景统计 30 秒
test fps 60 # 每个场景统计 60 秒
test fps 30 45 60 30 # 分别设置四个场景统计秒数
test stop # 取消并恢复状态
每个时长最少 30 秒,省略时默认 30 秒;非法参数不会启动测试。进入目标页面并等待稳定后开始动作,跳过实际刷新回调的前 10 帧,从第 10 帧结束时开始计时和统计,准备与预热时间不计入指定时长。
测试自动启用帧率输出和强制全屏刷新(等效 fps -force),并保存测试前状态。tileview 临时启用循环;不足两个页面时输出异常结束日志。菜单布局和循环仅在运行时修改,不写入用户配置。正常结束、test stop 或页面/帧超时均释放输入,恢复原菜单布局、循环、帧率开关及强制刷新状态,并返回主菜单。测试期间其他测试命令被拒绝,使用 test stop 取消。
日志统一以 [test-fps] 开头,场景名依次为 cellular、list、tileview、setting:
[test-fps] scene=list event=warmup
[test-fps] scene=list event=start duration_s=30 warmup_frames=10
[test-fps] scene=list event=result elapsed_ms=30000 frames=1800 fps=60.00
[test-fps] event=finish reason=complete
fps 为整个统计区间的平均帧率,保留两位小数;elapsed_ms 是实际统计时长。取消时结束原因为 cancel,异常会输出具体原因,不输出该未完成场景的完整结果。
2.1 随机测试¶
命令:test random [period_s|-period period_s] [选项]
也可以使用 test monkey,效果相同。命令从主界面开始,随机选择应用运行和测试。
period_s:位置参数,设置应用切换周期,单位为秒。-period period_s:设置应用切换周期,单位为秒。未设置时默认为随机 5~60 秒。-life_time 秒数:设置总测试时长,单位为秒;未设置时持续运行,直到执行test stop。-cir:启用圆周方向测试。-adv:启用增强随机测试策略。-wakeup msg|lcpu:启用周期暂停和唤醒,仅支持随机测试;具体用法见第 6 节。
示例:
test random
test random 30 -life_time 3600
test random -adv -wakeup msg -life_time 3600
test random -adv -wakeup lcpu -life_time 3600
2.2 定向测试应用¶
命令:test app <应用名> [period_s] [-long_press] [选项]
只对指定应用进行测试。省略应用名时会输出应用列表。-long_press 增加长按动作概率。切换周期及模式选项与随机测试相同,支持随机模式和 E1 动作模式。
示例:
test app Clock 30 -long_press
test app Clock -period 30 -life_time 600
2.3 遍历应用¶
test trav [period_s] [选项]:按顺序遍历应用。test trav_random [period_s] [选项]:随机遍历应用。
周期单位为秒;未设置时默认为随机 5~60 秒。支持 -period、-life_time、-random/-e0、-e/-e1、兼容参数 -e2 和 -cir 选项。-e2 当前按随机动作模式处理。
示例:
test trav 30 -life_time 1800
test trav_random -period 30
2.4 暂停、恢复和停止¶
test suspend:暂停当前测试,直到执行恢复命令。test suspend 秒数:暂停指定秒数后自动恢复。test suspend -period 秒数:与上一个形式相同,显式用-period指定暂停时长。test resume:恢复已暂停的测试。test stop:停止当前测试或录制。
示例:
test suspend
test resume
test suspend -period 60
test stop
2.5 应用列表和 HOME 键¶
test -app_list:打印应用列表。test -home:发送一次 HOME 键按下和释放事件。该命令仅在SOLUTION构建中可用。
3. 指定输入动作¶
指定动作使用 test -evt <动作>。动作支持 left、right、up、down、move、shake、long_press、click、home_key 和 self_def。坐标未指定时使用动作默认位置(方向滑动使用屏幕边缘附近位置,其他动作默认屏幕中心)。
3.1 点击¶
命令:test -evt click [-xy X Y]
test -evt click -xy 100 200
3.2 长按¶
命令:test -evt long_press [-xy X Y] [-duration 时长]
-duration 按输入设备的采样周期计数,不是直接的毫秒值。示例数值应结合当前显示刷新/输入周期调整。
test -evt long_press -xy 100 200 -duration 30
3.3 坐标移动¶
命令:test -evt move -xy X1 Y1 X2 Y2 [-duration 时长]
-xy 后可给出起点和终点坐标;-duration 按输入采样周期计数。
test -evt move -xy 100 200 300 200 -duration 30
3.4 方向滑动及重复测试¶
命令:test -evt <left|right|up|down> [-xy X Y] [-interval 像素步长] [-rep] [-period 时长] [-slide] [-fps]
-interval:每步移动的像素距离,默认 16。-rep:重复执行动作。-period:重复动作的最长时长,按输入采样周期计数。-slide:到达页面边界后反向滑动并继续;仅支持方向滑动,且不能与-fps同时使用。-fps:重复方向滑动,用于连续滑动/帧率测试。
示例:
test -evt right -interval 16 -rep
test -evt left -xy 300 300 -rep -fps
test -evt right -slide
-slide 在检测到页面内容边界或页面状态变化后决定是否反向,不等同于固定次数的往返滑动。
3.5 摇动、HOME 键和自定义动作¶
test -evt shake
test -evt home_key
test -evt self_def [模式编号] [-xy X Y]
self_def 通过 test_self_defined() 生成动作点;默认实现可由应用侧弱符号覆盖。-xy 对自定义动作指定中心坐标。
4. 录制和回放¶
录制/回放的存储方式取决于构建配置(PC Simulator、文件系统或指定 Flash 地址)。使用 test -help 查看当前固件帮助;配置了文件系统录制时,可通过文件路径指定文件。
test record
test record <文件路径> [容量十六进制]
test playback
test playback <文件路径>
test stop
在未启用文件系统录制的配置中,录制命令需要按固件提示提供 Flash 地址和长度;回放需要提供录制数据所在的 Flash 地址。执行前确认目标存储区域及分区配置,避免覆盖有效数据。
5. 日志和帮助¶
test -log:设置日志级别。级别0关闭日志,1输出事件日志,2输出事件和输入日志;默认级别为1。test -log 0、test -log 1、test -log 2:切换日志级别。test -help:输出固件内置命令帮助。
6. 周期暂停和睡眠唤醒测试¶
6.1 使用 Monkey 统一控制¶
在随机测试中添加 -wakeup msg 或 -wakeup lcpu,即可由同一个 Monkey 会话循环执行“运行 → 暂停 → 等待唤醒 → 恢复”。无需额外执行 period_msg 或 lcpu_period_awake。
参数 |
含义 |
默认值 |
|---|---|---|
|
通过一次性应用消息唤醒并恢复测试 |
不指定 |
|
通过 LCPU 传感器事件唤醒并恢复测试 |
与 |
|
每轮 Monkey 清醒运行时长 |
60 秒 |
|
从暂停、设置唤醒源到触发唤醒的延时 |
15 秒 |
|
整个测试会话的总时长,包含暂停等待时间 |
不限时,直到执行 |
推荐命令(默认运行 60 秒、暂停等待 15 秒,总测试时长 1 小时):
test random -adv -wakeup msg -life_time 3600
实机使用 LCPU 事件唤醒:
test random -adv -wakeup lcpu -life_time 3600
自定义每轮运行和等待时长:
test random -wakeup msg -awake_time 30 -sleep_time 10
部分 Shell 的参数数量有限。若提示 Too many args,应缩短命令并省略使用默认值的参数;不要继续使用被截断的命令。
清醒运行时间到后,Monkey 等待模拟输入释放,设置一次性唤醒源并进入暂停状态。暂停时临时将锁屏超时设为 1 秒并允许自动锁屏,由实机原有电源管理流程进入睡眠。收到消息或事件后恢复同一个测试会话,还原锁屏超时并禁止自动锁屏;停止测试时取消待触发的唤醒源并恢复临时设置。-sleep_time 从暂停时开始计算,包含等待锁屏的时间,不等于硬件实际睡眠时长。
PC Simulator 支持 -wakeup msg:等待期间停止 Monkey 操作,但不模拟硬件睡眠;消息到达后恢复测试。模拟器不支持 LCPU 唤醒源。实机使用 lcpu 需要启用传感器支持,并配套支持一次性唤醒请求的 LCPU 固件。
周期暂停时可看到以下日志:
[monkey] test suspend
[monkey][sleep] test suspended; wakeup delay_ms=15000
消息唤醒和恢复时可看到:
[monkey][sleep] application message wakeup
[monkey][sleep] GUI resume paused_ms=... suspended_ms=...
日志时间单位为毫秒。模拟器未进入真实 GUI 睡眠时,suspended_ms 为 0。可以使用 test resume 提前结束周期暂停,或使用 test stop 结束整个测试。
6.2 原有独立测试命令¶
以下命令继续保留,用于单独测试周期消息或 LCPU 唤醒。使用第 6.1 节的统一命令时无需启动它们,也不要与新的周期功能同时开启;旧周期测试正在运行时,新功能的唤醒源可用性检查会拒绝启动。
周期性消息触发睡眠唤醒¶
命令:period_msg [-period 间隔] [-monkey 时长]
按
-period(单位:秒)周期性发送消息,模拟消息到达导致设备唤醒。不带参数时启动周期消息模拟,默认基础间隔为 40 秒;每次触发会在基础间隔上增加 0~59 秒随机偏移。
消息内容覆盖短信、应用通知、来电、挂断及多语言文本等场景。
-monkey:消息唤醒后执行随机 MONKEY 测试;指定单次测试基础时长(单位:秒),实际时长会增加 0~29 秒随机偏移;未指定时长时默认为 15 秒。使用
-monkey时会临时将息屏时间设为 1 秒;停止模拟后恢复原息屏时间。若
-period小于-monkey + 1,命令会将周期调整为-monkey + 1。
代码入口:solution/components/message/app_message_ui.c 中的 cmd_send_period_msg()。
period_msg -period 60 -monkey 30
period_msg
传感器事件触发唤醒¶
命令:lcpu_period_awake [-period 间隔] [-monkey 时长]
通知 LCPU 按指定周期(单位:秒)上报传感器测试事件,模拟传感器事件唤醒 HCPU。指定 -monkey 后,在唤醒时执行随机 MONKEY 测试;未指定时长由底层默认策略处理。使用 -monkey 时息屏时间会临时设为 1 秒;当周期小于 -monkey + 1 时,命令会自动增大周期。
代码入口:solution/components/comm/comm_info.c 中的 cmd_lcpu_period_awake_hcpu()。
lcpu_period_awake -period 20 -monkey
lcpu_period_awake -period 60 -monkey 30
lcpu_period_awake
7. 适配说明¶
未使用默认 GUI 应用框架(通过 menuconfig 关闭 GUI_APP_FRAMEWORK)时,可在 sdk/middleware/lvgl/lvsf/lv_monkey_port.c 适配应用切换、主应用/Tileview 查询、返回上级页面和锁屏控制等接口。应用遍历逻辑位于 test_travserse_app(),自定义动作可覆盖 test_self_defined()。
