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. 可选参数说明¶
参数 |
作用 |
单位 |
|---|---|---|
|
单个应用内的测试时长,超时后切换应用或返回主菜单 |
s |
|
总测试时长,超时后自动停止测试(仅 |
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框架。
