-
Notifications
You must be signed in to change notification settings - Fork 227
Home
开源出于公益,若觉得对您有帮助,请给个star,若觉得不满足自己业务的需求,fork下,可以定制开发,欢迎宣传转发,感激不尽,至少能让业界少踩点坑
工具方案选型 实现 效果参考阿里巴巴Android性能测试工具mobileperf开源(天猫精灵Android性能测试-线下篇) 由于Android权限控制越来越严格,通过APP跨进程获取性能数据在Android高版本已越来越困难,由于adb shell权限比较高,相信Android会一直开放开发者权限,故方案选型阶段,采用了依赖adb的方案,开发了一套Android性能稳定性工具mobileperf,跟GT APP对比如下:
注:GT github上已表示Android GT后续不再支持GT APP,只支持GT SDK
优点:
对app零侵入,无需root手机,只要能使用adb,方便做竞品测试,也能跟自动化、稳定性测试结合
-
安装python3.7 python下载链接 mac上执行python3 --version确认下版本,或者保证python指向python3,就可以直接用python来执行 windows上执行python --version,确保是python3 ,加入到环境变量中
-
直接下载压缩包解压缩或通过git操作,不要放在有中文 空格的目录下
-
安装adb,确保adb devices能找到设备
开始:性能采集工具采用配置文件,根目录下的config.conf文件,改一次,后面都可用,不用每次都传参,参考配置如下
进入工程根目录,mac linux执行sh run.sh window双击执行run.bat
1、采集时长到
2、接受终端命令行 Ctrl+C
以上两种方式都会在本地生成summary_结束时间点.xlsx的汇总文件
生成结果会在配置项save_path下或工程下results目录下(save_path为空时)会创建包名/测试时间的目录,里面有cpu、内存、fps 启动时间 线程数 全量logcat日志 异常日志 进程堆栈 流量的测试结果
测试结果会保留在包名/测试开始时间的目录下,目录结构如下
性能测试完成之后需要验证以下几点:
- 进程内存占用 cpu是否正常
- 性能结果文件夹中的 exception.log,是用户自己在config文件中填的logcat关注错误日志(默认fatal exception;has died),工具发现了会提取出来写到exception.log文件中,然后根据这些日志从logcat日志里找上下文去排查
- /data/anr/ 目录查看有无anr,需要手机有pull权限,工具会自动pull到PC上
cpu信息在cpuinfo表中,表中各列解释 测试进程CPU使用率曲线图
在测试过程中会生成一个meminfo.csv文件,可以查看,表中各列解释
这个csv表格是用dumpsys meminfo得出的,汇总xlsx文件会在测试结束后生成,对应meminfo这个表格
每个进程会有pss部分包名的csv表格,这个表格是用dumpsys meminfo package得出的 能把每个进程的详细内存展示出来 汇总xlsx中对应pss部分包名这个表格
如果进程发生了内存泄露,根据曲线,很方便一眼就看出是哪部分导致泄漏
会将测试设备adb serialnum 、手机型号、测试包名 系统版本 APP版本信息放在device_test_info.txt文件中
在测试过程中会生成一个cpuinfo.csv文件,可以测试过程中查看,表中各列解释 上面汇总xlsx文件会在测试结束后生成,xlsx数据跟csv数据完全一致,xlsx汇总是根据csv的数据画的曲线(csv没有画图功能),汇总xlsx中对应cpuinfo这个表格
测试过程中,windows打开后记得关闭csv文件,否则会有写入没权限,会报错
在测试过程中会生成一个meminfo.csv文件,可以查看,表中各列解释
这个csv表格是用dumpsys meminfo得出的,汇总xlsx文件会在测试结束后生成,对应meminfo这个表格
每个进程会有pss部分包名的csv表格,这个表格是用dumpsys meminfo package得出的 能把每个进程的详细内存展示出来,汇总xlsx中对应pss部分包名这个表格 如果进程发生了内存泄露,根据曲线,很方便一眼就看出是哪部分导致泄漏,java_heap native_heap system分别对应的是dumpsys meminfo package结果中 Java Heap: Native Heap: System: 后面的数字
工具会把dumpsys meminfo的结果保存在dumpsys_meminfo.txt中,把dumpsys meminfo package的详细结果都会保存在dumpsys_meminfo_package.txt文件中,若有疑问,可以看txt里的详情数据
如果手机和app有权限能am dumpheap,需要apk支持导出hprof,mobileperf还会自动导出hprof文件
工具会保留全量logcat日志,每隔60万行会新建文件,辅助定位问题
如果配置文件中配置了异常日志 会将logcat中出现的异常日志都保存在exception.log中
mobileperf调用了Android原生的monkey,如果您想限制在指定内activity内跑monkey ,可以通过配置项,开启monkey 后,会在测试目录下生成monkey.log,monkey=true 前提下再增加main_activity 、activity_list两个配置项
#如果需要在限定activity内做monkey test,main_activity是模块的几个主入口,用分号; 分隔
#main_activity=com.alibaba.ailabs.genie.contacts.MainActivity
#activity_list是准许的activity,main_activity开启前提下有效
activity_list=com.alibaba.ailabs.genie.contacts.MainActivity;
com.alibaba.ailabs.genie.contacts.cmd.CmdDispatchActivity;
com.alibaba.ailabs.genie.contacts.cmd.transform.VoipToPstnActivity;
com.alibaba.ailabs.genie.contacts.add.AddContactsActivity;
com.alibaba.ailabs.genie.contacts.avatar.TakePhotoActivity;
com.alibaba.ailabs.genie.contacts.details.DetailsActivity;
com.alibaba.ailabs.genie.contacts.add.RelationshipActivity;
com.alibaba.ailabs.genie.contacts.details.DownloadTipsActivity;
com.alibaba.ailabs.genie.contacts.details.DownloadTipsMiniActivity;
com.alibaba.ailabs.genie.contacts.cmd.selectlist.call.VCallListActivity;
com.alibaba.ailabs.genie.contacts.cmd.selectlist.contacts.VContactListActivity;
com.alibaba.ailabs.genie.contacts.message.VoiceDetailsActivity
如果手机有权限,会把/data/anr里的trace文件pull出来,结构图如下
常驻进程,需要关注pid变化,需在config.conf中增加pid_change_focus_package配置项,多个进程,英文分号分隔 pid_change_focus_package=com.alibaba.ailabs.genie.smartapp;com.alibaba.ailabs.genie.smartapp:core
工具会把pid变化保存在pid_change.csv文件中 有可能Crash,有可能进程自杀,有可能被系统杀掉,可以根据pid变化时间点附件的日志排查问题
流畅度数据在fps.csv中 表中各列解释
流量数据在traffics_uid.csv中 通过cat /proc/net/xt_qtaguid/stats获取,表中各列解释
电量数据在powerinfo.csv中,先通过dumpsys batteryproperties获取,如果获取不到,再通过dumpsys battery获取(Android9),表中各列解释
不足:插着usb,这两种方式获取到的并不精准,并非专业级电流电量测试,只能作为参考