当前位置: 首页 > 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.jsqmd.com/news/886509/

相关文章:

  • 从RD、CS到WK:一文讲透SAR主流成像算法的演进与选型实战
  • Unity图片优化实战:解决UI图片内存暴涨与比例失控
  • 百度文心一言开发者如何通过Taotoken低成本接入多模型API
  • 2026 年 AI 毕业论文工具横评:从降 AIGC 率到智能排版,10 款平台实测谁才是毕业季的 “救命稻草”
  • Veo 2提示词性能瓶颈诊断:基于1726组AB测试的token敏感度热力图与阈值红线预警
  • 为什么选择raylib?5分钟快速上手的跨平台游戏开发库终极指南
  • 5分钟精通SPT-AKI存档编辑器:离线塔科夫终极修改指南
  • 基于MAX78000的医疗紧急呼叫系统:边缘AI与低功耗设计实战
  • 数据库范式化设计与性能优化全攻略
  • 2026年业务分析报告服务TOP5深度测评:报告生成能力与落地效果全对比 - 科技焦点
  • 从零构建:深入理解Linux启动过程
  • 3大实战秘籍:揭秘raylib如何让游戏开发像搭积木一样简单
  • 2026 上海 GEO 优化机构实力榜:AI 搜索第一推荐位抢占攻略 - GEO优化
  • 智慧养老系统用药管理:精准管控老人用药
  • 2026 广州 GEO 优化机构实力榜:AI 搜索第一推荐位抢占攻略 - GEO优化
  • 用了ChatGPT写论文初稿,如何降低AI率并同步减少文字重复率?
  • CAPL脚本效率翻倍秘诀:巧用testfunction组织你的自动化测试用例
  • LCDC工具包与RoBo6数据集:标准化光曲线分析赋能空间碎片智能识别
  • 当 AI Coding 进入复杂企业系统,为什么提效远没有宣传里那么美好 ?
  • PDF4QT:免费开源的PDF全能工具箱,轻松处理各类文档难题
  • UE5 Niagara实战:用Generate Location Event制作粒子追踪特效(附完整蓝图)
  • OFD转PDF专业解决方案:Ofd2Pdf开源工具全面指南
  • ARM编译器函数性能分析工具链演进与实践
  • 飞书文档一键批量导出:企业知识库迁移效率提升95%的终极解决方案
  • 基于VAE潜在空间与机器学习分类器的恶意软件检测实战
  • UE5增强输入系统如何可靠激活GameplayAbility
  • DeepSeek微服务化部署下的集成测试困局:如何用契约测试+MockLLM在48小时内完成全链路回归?
  • 论文写作效率翻倍?okbiye 毕业论文 AI 功能全解析:从需求到终稿的规范路径
  • 告别混乱绑定!在UE5 GAS中优雅管理技能输入(基于GameplayTag)
  • 渗透测试——漏洞扫描工具