当前位置: 首页 > 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.cnnetsun.cn/news/2565003.html

相关文章:

  • 如何免费解锁WeMod专业版功能:Wand-Enhancer完整指南
  • 论文的格式是什么?
  • 为什么MPC Video Renderer能实现零拷贝视频渲染?深度解析DirectShow渲染器的技术突破
  • 别再傻傻复制粘贴了!用mklink硬链接/Junction,给Windows文件夹做个‘分身术’
  • 毕业设计:基于mvc的高校办公室行政事务管理系统设计与实现(源码)
  • 为什么鸿蒙 App 最终都会走向状态驱动?
  • 中小型企业做GEO优化性价比高吗
  • PDF4QT:免费开源的PDF全能工具箱,轻松处理各类文档难题
  • 别再只会用Linux虚拟机了!手把手教你给Windows Server 2019/2022配置OpenSSH服务端,实现Xshell/Xftp直连
  • Keil µVision链接器错误204解决方案
  • OAuth2调试利器:oauth2-mock-server实战指南
  • 3分钟学会NCM解密:让网易云音乐文件在任何设备自由播放!
  • 机器学习原子模拟中的不确定性量化:贝叶斯与集成方法实践指南
  • Web渗透中框架组件识别的三维可信度模型与实战穿透
  • GDRE Tools:Godot二进制调试与资产复用技术指南
  • Kotlin 委托详解
  • 智慧城配管理系统,解锁物流运营全新竞争力
  • 双层 HITL 架构:为什么你的 AI 客服需要前置规则 + 后置兜底?
  • Spring Security OAuth2 /oauth/token 401原因与Content-Type规范
  • ssm果蔬经营平台系统(10105)
  • RAG 检索增强生成实战:从 Demo 到生产环境的五个关键优化
  • OpenVSP完全指南:从零开始掌握免费飞机参数化设计工具
  • Unity多维排序机制全解析:渲染、执行与序列化顺序
  • 8051微控制器内存限制与printf参数传递优化
  • FlashMLA-ETAP:高效转置注意力管道优化大模型推理
  • Midjourney辉光效果商业级交付标准(ISO/IEC 23015-2024 AI视觉输出规范第7.4条实操解读),错过将影响平台审核通过率
  • 【2026最新】实测8款论文降AI工具:从标红到5%!附免费提示词指令
  • 告别Transformer卡顿?手把手教你用Mamba架构加速长文本生成(附代码示例)
  • DeepSeek漏洞扫描辅助:Gartner最新评估中唯一获评“生产就绪级”的开源增强方案?
  • 2026这6款神级降AI率工具大曝光,一键把AI检测率精准控到安全区!