Python+ADB+Monkey实现ROM稳定性自动化测试方案
本文详解如何利用Python结合ADB和Monkey工具,构建一套针对Android ROM的自动化稳定性测试方案。重点解决Framework层权限管控下的应用安装卸载、后台指令下发及黑屏复现问题。通过自动化脚本收集Logcat、内存及CPU数据,高效定位Binder故障与内存泄露,为开发提供精准复现路径。
测试背景与目标
开展此项工作的初衷源于实际测试需求。
该工作最初由同事负责,但在执行过程中发现部分问题,由于日志和数据未能完整采集,导致后续无法进行深入分析。随后由我接手,主要职责是复现此前发现的问题,并提取完整的日志与数据供开发团队进行排查。
明确测试目标与范围。
具体需求涉及Framework层的App应用权限管控机制(涵盖Android 11中的基本权限、自定义权限及AIDL接口)。服务端可通过下发指令至手机,动态控制App的访问权限(允许或禁止)。此外,App安装过程需增加签名校验环节。
自动化测试实施方案
确定实施策略与自动化路径。
自动化执行是必然选择,关键在于实施方案。首先,Client端需要接收并执行指令,人工逐一操作效率低下。鉴于已有Web管理页面,我们利用按键精灵录制屏幕操作,持续向Client端下发指令,从而实现了后台无人值守运行。然而,Client端的自动化处理仍需解决。
针对Client端的应用管理问题。
由于测试核心在于App权限拦截,必须依赖具体的App进行验证。我们选取了30个常用App及若干测试Demo。针对这些App的安装与卸载,手工操作显然不可行,因此采用Python结合ADB命令实现自动化。安装过程通过Python获取APK路径并执行adb install命令;卸载时需传入包名,可通过“pm list package -3”配合awk命令过滤出已安装APK的包名,再执行adb uninstall完成卸载。至此,APK的安装与卸载自动化流程已打通,但新的问题随之出现。
解决应用启动的自动化难题。
应用需使用特定权限,前提是先启动应用。虽然可使用am命令,但需获取MainActivity名称,即便借助工具获取也耗时费力。因此,本方案放弃am命令,改用Monkey启动应用,仅需传入包名即可,大幅简化了操作流程。
在确定安装、卸载及启动思路后,重点转向日志与数据的采集。利用Python的subprocess.Popen()函数调用logcat命令(具体过滤方法略),实现测试过程中日志的持续输出。鉴于需复现黑屏问题,还需定时收集CPU和Memory信息,同样通过Python定时执行dumpsys meminfo和cpuinfo命令获取相关数据。
测试执行与问题复现
脚本执行结果分析。
第一轮测试中,通过dump输出的内存信息发现某个本地层进程存在内存泄露,初步判断该泄露可能导致黑屏,开发团队据此进行了修复。
第二轮测试中,黑屏问题再次出现,但原因已非内存泄露,而是Binder崩溃(因系统Binder曾被修改)。进一步分析发现,仅当360手机卫士、腾讯手机管家等安全类应用在设备上长时间运行时才会触发此问题。这表明App的选择需紧密结合功能与业务场景,不可盲目选取。
总结:此项测试工作具有较高的积累价值,特此记录以便后续类似场景参考。
Shell脚本生成日志示例
补充知识:Shell脚本实战之生成日志文件。
具体实现代码如下:
#!/bin/bash
today=$(date +%y%m%d)
#the cause to use the command ls is in that to bulit a new #file,not in that the command ls.
ls /usr/bin -al > $today.log
以上内容为Python+ADB+Monkey实现ROM稳定性测试的完整分享,旨在提供参考,欢迎支持。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









