当前位置: 首页 > news >正文

别再乱点屏幕了!用Monkey黑白名单精准测试你的Android App(附完整配置文件)

别再乱点屏幕了!用Monkey黑白名单精准测试你的Android App(附完整配置文件)

当你的测试设备上安装了十几个应用——自家产品、系统工具、竞品App混杂在一起,每次运行Monkey测试就像在玩俄罗斯轮盘赌:不知道下一秒随机事件会触发哪个应用,导致测试数据污染或意外跳转。这种失控状态让测试工程师们头疼不已。

其实Android早就提供了精准控制的解决方案。通过--pkg-whitelist-file--pkg-blacklist-file这两个杀手级参数,配合简单的文本配置文件,你完全可以像手术刀般精确划定测试范围。下面我将用真实项目经验,带你掌握这套组合拳的实战用法。

1. 为什么需要黑白名单机制

想象这样一个场景:你正在测试电商App的支付流程稳定性,Monkey突然切换到短信应用发送了验证码,或是打开了相册浏览照片。这些"误伤"不仅污染测试数据,更可能引发隐私问题。黑白名单机制就是为解决这类问题而生:

  • 白名单:只允许测试指定包名的应用,其他应用完全绝缘
  • 黑名单:禁止测试特定包名的应用,其余应用正常接收事件

实际项目中,我推荐优先使用白名单模式。黑名单更适合需要排除少量干扰应用的场景,比如屏蔽系统设置或拨号盘这类高危应用。

2. 配置文件实战指南

2.1 创建黑白名单文件

新建whitelist.txt文件,内容格式如下:

# 这是测试目标应用 com.example.shoppingapp # 这是关联的登录服务 com.example.authservice # 每行一个包名,#开头为注释

关键要点:

  • 使用adb shell pm list packages查看完整包名
  • 测试前用adb install确认应用已安装
  • 文件建议放在/sdcard/目录避免权限问题

2.2 推送文件到设备

adb push whitelist.txt /sdcard/ adb shell ls /sdcard/whitelist.txt # 验证文件存在

遇到过的一个坑:部分国产机型需要改用/data/local/tmp/目录,否则会提示文件不存在。

2.3 执行精准测试命令

基础白名单测试:

adb shell monkey --pkg-whitelist-file /sdcard/whitelist.txt \ --throttle 300 \ -v -v 5000

增强版命令(带异常处理和事件分布调整):

adb shell monkey --pkg-whitelist-file /sdcard/whitelist.txt \ --ignore-crashes \ --ignore-timeouts \ --pct-touch 40 \ --pct-motion 20 \ --throttle 200 \ -v -v -v 10000

3. 高阶配置技巧

3.1 动态包名管理

在持续集成环境中,可以编写脚本动态生成名单文件:

# generate_whitelist.py import subprocess target_packages = ["com.example.app", "com.example.lib"] with open("whitelist.txt", "w") as f: for pkg in target_packages: f.write(f"{pkg}\n") subprocess.run(["adb", "push", "whitelist.txt", "/sdcard/"])

3.2 多设备并行测试

通过序列号区分设备:

# 设备A测试主App adb -s emulator-5554 shell monkey --pkg-whitelist-file /sdcard/whitelist_app.txt 5000 # 设备B测试配套服务 adb -s emulator-5556 shell monkey --pkg-whitelist-file /sdcard/whitelist_service.txt 5000

3.3 事件类型精细控制

推荐的事件比例分配:

事件类型参数推荐比例适用场景
触摸事件--pct-touch30-40%常规UI测试
滑动事件--pct-motion15-20%列表滑动验证
应用切换--pct-appswitch5-10%多任务稳定性测试
系统按键--pct-syskeys1-2%按键兼容性测试

4. 避坑指南

最近在小米设备上遇到一个典型问题:即使正确配置了白名单,Monkey仍然会触发系统桌面。解决方案是额外黑名单:

# blacklist.txt com.miui.home com.android.launcher

其他常见问题:

  1. 包名错误:特别是预装应用,不同厂商可能修改包名

    • 解决方案:adb shell pm list packages | grep keyword
  2. 文件权限问题:出现"Can't open whitelist file"错误

    • 尝试路径:/data/local/tmp//mnt/sdcard/
  3. Monkey提前退出:添加--ignore-security-exceptions参数

  4. 事件分布不均:通过--pct-*参数调整比例,用-v -v -v查看详细日志

在华为EMUI系统上测试时,发现需要额外禁用系统优化:

adb shell settings put global hidden_api_policy_pre_p_apps 1 adb shell settings put global hidden_api_policy_p_apps 1

这些实战经验都是踩了无数坑才总结出来的。记得第一次使用黑白名单时,因为没注意文件换行符格式,导致整晚的测试全跑在了系统应用上。现在我的自动化脚本里一定会先做文件验证:

# 验证文件有效性 adb shell cat /sdcard/whitelist.txt | grep -v "^#" | while read pkg; do adb shell pm path $pkg || echo "Invalid package: $pkg" done
http://www.rkmt.cn/news/1384901.html

相关文章:

  • 第三卷第4章:原型模式设计思想
  • Godot4 2D游戏开发避坑指南:TileMap绘制、节点顺序与相机设置的三个常见问题
  • 5分钟精通SPT-AKI存档编辑器:离线塔科夫终极修改指南
  • 基于MAX78000的医疗紧急呼叫系统:边缘AI与低功耗设计实战
  • 从零构建:深入理解Linux启动过程
  • 2026年业务分析报告服务TOP5深度测评:报告生成能力与落地效果全对比 - 科技焦点
  • 电信运营商每月处理海量工单,如何不再出错?基于AI Agent的端到端自动化解决方案
  • UE5 Mac环境搭好了,然后呢?给新手的第一个5分钟:创建、操控并理解你的第一个角色
  • Stylized Clouds Pack技术解析:卡通云朵的Shader架构与URP性能优化
  • 用了ChatGPT写论文初稿,如何降低AI率并同步减少文字重复率?
  • PDF4QT:免费开源的PDF全能工具箱,轻松处理各类文档难题
  • 不止是随机播放:用Unity VideoPlayer做个简易的广告机或展厅视频轮播系统
  • 简单学习 --> KV Cache
  • 简单学习 --> GPT架构
  • 从‘Hello World’到数据迁移:KingbaseES类型转换的5个高频实战场景解析
  • 飞书文档一键批量导出:企业知识库迁移效率提升95%的终极解决方案
  • Win11 IIS搭建局域网网站避坑指南:MIME类型、目录浏览这些设置千万别乱动
  • 保姆级避坑指南:在Ubuntu 22.04上搞定ROS2 Humble、PX4与Gazebo的联合仿真(附Empy版本降级)
  • Burp Suite拦截与替换机制深度解析:从协议层到规则链
  • BurpSuite本地HTTPS流量捕获全链路解析
  • 告别无效改稿:okbiye 毕业论文写作功能,如何让高校论文从 0 到 1 合规落地
  • 一文知数据库
  • 亲测有效!AI率92%暴降至5%!实测10款降AI率工具!学生党狂喜!
  • eBPF与GMM在AI系统监控中的创新应用
  • Cursor Pro激活工具深度解析:三步解锁AI编程助手完整功能
  • 网页高亮神器:Highlighter浏览器扩展的终极使用指南
  • 为什么说CLIP是多模态大模型的基石?
  • 为什么选择raylib?5分钟快速上手的跨平台游戏开发库终极指南
  • UE5 RPG实战:用Motion Warping插件搞定角色释放技能时的自动转向(附蓝图接口优化)
  • DIY 48V幻象电源:线性稳压方案与350mA过压保护设计